关于c# 引发了"system.indexOutofRangeException"类型异常,该怎么处理

说明:写了一个随机抽题的方法,用于随机抽取access数据库题目,开始时能够正常抽题,正常显示,大概随机抽取20-30题左右,出现上述异常。然后vs2008提示:priv... 说明:写了一个随机抽题的方法,用于随机抽取access数据库题目,开始时能够正常抽题,正常显示,大概随机抽取20-30题左右,出现上述异常。然后vs2008提示:
private void btnRandom_Click(object sender, EventArgs e)
{
OleDbConnection sqlcon = boperate.getcon();
OleDbDataAdapter dk = new OleDbDataAdapter("select id from 题库表 order by id desc", sqlcon);
DataTable dt = new DataTable();
dk.Fill(dt);
Random rnd = new Random();
int c = int.Parse(dt.Rows[0].ItemArray.GetValue(0).ToString());//该处提示异常,异常提示附下面。
int b = rnd.Next(0, c);
int d = b + 1;
btnRnd.Text = d.ToString();

OleDbDataReader sqlreadRnd = boperate.getread("select * from 题库表 where id="+btnRnd.Text.Trim()+"");
if (sqlreadRnd.Read() == false)
{
MessageBox.Show("暂无“" + labCheXing.Text + "”类型试题!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
//Frm_Main.PFrm_Main.Close();
labTotal.Text = "0";
}
else
{
t = 1;
labNow.Text = t.ToString();
//labTotal.Text = boperate.getds(Frm_Type.frmtype.str_Sqlstr, "题库表").Tables[0].Rows.Count.ToString();
if (sqlreadRnd["题型"].ToString() == "选择题")
{
lab_Title.Text = sqlreadRnd["题目"].ToString();
labA.Text = sqlreadRnd["回答A"].ToString();
labB.Text = sqlreadRnd["回答B"].ToString();
labC.Text = sqlreadRnd["回答C"].ToString();
labD.Text = sqlreadRnd["回答D"].ToString();
txtFlag.Text = sqlreadRnd["id"].ToString();
labC.Visible = true;
labD.Visible = true;
picC.Visible = true;
picD.Visible = true;
btnC.Visible = true;
btnD.Visible = true;
txtAnswer.Text = sqlreadRnd["答案"].ToString();
}
else
{
lab_Title.Text = sqlreadRnd["题目"].ToString();
labA.Text = sqlreadRnd["回答A"].ToString();
labB.Text = sqlreadRnd["回答B"].ToString();
labC.Visible = false;
labD.Visible = false;
picC.Visible = false;
picD.Visible = false;
btnC.Visible = false;
btnD.Visible = false;
txtAnswer.Text = sqlreadRnd["答案"].ToString();
}

}
}

异常代码提示:dt.Rows[0].ItemArray = “dt.Rows[0]”引发了“System.IndexOutOfRangeException”类型的异常;
base {System.SystemException} = {"在位置 0 处没有任何行。"};
{"在位置 0 处没有任何行。"}
vs2008最后提示:
_message = "在位置 0 处没有任何行。"
谢谢大家的参与,我希望能解决这个问题,但我更希望能知道问题产生的原因,因为只有知道问题产生的根源,才能更彻底地解决它。所以麻烦诸位给分析下原因。更重要的是一开始是能运行的,到随机产生20-30题后,就会出现这个错误。所以我想问:为什么呢?
展开
 我来答
火沙
2009-09-01 · TA获得超过954个赞
知道小有建树答主
回答量:478
采纳率:0%
帮助的人:400万
展开全部
根据你的异常信息来看是dt(DataTable)的行数为0了,即dk.Fill(dt)没有查询结果为0行。

也许数据库中没数据,不过你说“开始时能够正常抽题,正常显示”,也就是说数据库应该是有数据的。
当然也不排除你作其它操作误删了,所以还是要确认一下。 这点比较好确认,只要你打开看看数据库行了。
如果有数据,那你在后面加sqlcon.Close();sqlreadRnd.Close();试试
每种数据库都会有一个最大连接数,而你Click事件里没有关闭连接数据库的代码,Click一下就连一次数据库,连二三十次不关闭,有可能就会造成“开始正常,后面异常”(瞎猜的,不知对不对)如果是这个原因,你也可以把sqlcon设为全局变量。这样应该也只是连一回数据库
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zdy_servers
2009-09-01 · TA获得超过185个赞
知道小有建树答主
回答量:163
采纳率:0%
帮助的人:188万
展开全部
dt.rows.count=0
在此处加一个判断
if(dt.rows.count>0
){
int c = int.Parse(dt.Rows[0].ItemArray.GetValue(0).ToString());//该处提示异常,异常提示附下面。
}
else

{}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
312486581
2009-09-01 · TA获得超过879个赞
知道小有建树答主
回答量:1095
采纳率:0%
帮助的人:540万
展开全部
下标越界!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
longkin_wl
2009-09-01 · TA获得超过141个赞
知道答主
回答量:300
采纳率:0%
帮助的人:0
展开全部
一般是数组操作界限
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式