恶心人的老问题,请指教~!

tom143 2008-04-19 01:01:34
索引超出了数组界限。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.IndexOutOfRangeException: 索引超出了数组界限。

源错误:


行 94: if (dd.Read())
行 95: {
行 96: this.LbClassTime.Text = (string)dd.GetSqlString(3);行 97: this.LbClassTime.DataBind();
行 98: }


源文件: e:\Documents and Settings\tom\桌面\ASP调试\实验室管理\SQB.aspx.cs 行: 96

堆栈跟踪:


[IndexOutOfRangeException: 索引超出了数组界限。]
System.Data.SqlClient.SqlDataReader.ReadColumn(Int32 i, Boolean setTimeout) +342
System.Data.SqlClient.SqlDataReader.GetSqlString(Int32 i) +21
SQB.TbJXB_TextChanged(Object sender, EventArgs e) in e:\Documents and Settings\tom\桌面\ASP调试\实验室管理\SQB.aspx.cs:96
System.Web.UI.WebControls.TextBox.OnTextChanged(EventArgs e) +75
System.Web.UI.WebControls.TextBox.RaisePostDataChangedEvent() +124
System.Web.UI.WebControls.TextBox.System.Web.UI.IPostBackDataHandler.RaisePostDataChangedEvent() +7
System.Web.UI.Page.RaiseChangedEvents() +138
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +4512


...全文
88 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanghui0380 2008-04-19
  • 打赏
  • 举报
回复
SqlCommand cmd = new SqlCommand("select count(*) from ClassTB where ClassNo='" + DropDownListClassNo.Text.ToString() + "'and ClassJXB='" + TbJXB.Text.ToString() + "'", con);

SqlDataReader dd = cmd.ExecuteReader();
this.LbClassTime.Text = (string)dd.GetSqlString(3);

GetSqlString方法获取指定列的 SqlString 形式的值。

呵呵,看红字标明的地方,自己想想你有第4列吗?

懒牛科技 2008-04-19
  • 打赏
  • 举报
回复
dd.GetSqlString(3);
改为
dd.GetSqlString(0);
fei997yang 2008-04-19
  • 打赏
  • 举报
回复
cmd的查询语句用了count自然是返回一列的表格,用3去读取数据自然是会超出索引的
insus 2008-04-19
  • 打赏
  • 举报
回复
先写一个方法:

protected bool IsExist(string classNo,string classJxb)
{
SqlConnection con = new SqlConnection("Server=.;database=TJUT实验室管理;uid=sa;pwd=;");
con.Open();
SqlCommand cmd = new SqlCommand("select * from ClassTB where ClassNo='" + classNo.Replace("'", "''") + "'and ClassJXB='" + classJxb.Replace ("'","''") + "'", con);
System.Data.SqlClient.SqlDataReader dr = cmd.ExecuteReader();
return dr.HasRows;
}


然后:


if (IsExist (DropDownListClassNo.Text.ToString(),TbJXB.Text.ToString())
{
//做存在的事情
}
else
{
//如果不存,做的事情
}


以上代码,只是示意.实际意义与原理分析,请看在QQ的说法.
tom143 2008-04-19
  • 打赏
  • 举报
回复
dd.Getint32(0);会报错,不老好使的。
zengxie 2008-04-19
  • 打赏
  • 举报
回复
索引超出了数组界限 dd.GetSqlString(3);应该没有数据吧
dd.Getint32(0);试试
conannb 2008-04-19
  • 打赏
  • 举报
回复
索引超出了数组界限 dd.GetSqlString(3);应该没有数据吧
tom143 2008-04-19
  • 打赏
  • 举报
回复
PS:上午实验时还是好好的……晚上就出问题了。
tom143 2008-04-19
  • 打赏
  • 举报
回复
    protected void TbJXB_TextChanged(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection("Server=.;database=TJUT实验室管理;uid=sa;pwd=;");
con.Open();
SqlCommand cmd = new SqlCommand("select count(*) from ClassTB where ClassNo='" + DropDownListClassNo.Text.ToString() + "'and ClassJXB='" + TbJXB.Text.ToString() + "'", con);
Int32 count = Convert.ToInt32(cmd.ExecuteScalar());
if (count > 0)
{
SqlDataReader dd = cmd.ExecuteReader();
if (dd.Read())
{
this.LbClassTime.Text = (string)dd.GetSqlString(3);
this.LbClassTime.DataBind();
}
}
else
{
RequiredFieldValidator3.IsValid = false;
}
con.Close();
}

62,025

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧