关于System.IndexOutOfRangeException错误,请问如何解决,谢谢!

各位大神好!程序运行出现以下错误提示,请问怎么处理,万谢!

“/”应用程序中的服务器错误。
Teacherid说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.IndexOutOfRangeException: Teacherid

源错误:

执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。

堆栈跟踪:

[IndexOutOfRangeException: Teacherid] System.Data.ProviderBase.FieldNameLookup.GetOrdinal(String fieldName) +6294782
System.Data.SqlClient.SqlDataReader.GetOrdinal(String name) +249
System.Data.SqlClient.SqlDataReader.get_Item(String name) +23
????灲?┫?.敜????痴鸩?(Object , String 働????驜?) +83
EDCOM.WebOffices.Course_Update.??揢??面痵?() +10469
EDCOM.WebOffices.Course_Update.Page_Load(Object sender, EventArgs e) +186
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +25
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +42
System.Web.UI.Control.OnLoad(EventArgs e) +132 System.Web.UI.Control.LoadRecursive() +66
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2428

从这个异常信息来看System.IndexOutOfRangeException: 在位置 0 处没有任何行,这个明显是溢出异常,所以可能情况有以下两点:

Tables.Rows这两个索引肯定有一个错误,要么Tables集合中0处确是没有表,要么Tables集合中0处的表中没有任何行,就我来说或者的错误可能行比较大。

建议此行代码设置断点,鼠标左键选中ds.Tables对象右键"快速监视"在快速监视中看看ds.Tables对象是否存在如果存在里面表中是否存在数据行。

代码常见错误介绍

1、IOError:I/O错误,当发生严重的I/O错误时,抛出此错误。

2、VirtualMachineError :虚拟机错误,当Java虚拟机崩溃或用尽了它继续操作所需的资源时,抛出该错误。

3、StackOverflowError:栈内存满了,当应用程序递归太深而发生堆栈溢出时,抛出该错误。

4、OutofMemoryError:堆内存满了,因为内存溢出或没有可用的内存提供给垃圾回收器时,Java虚拟机无法分配一个对象,这时抛出该异常。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-09-20
我觉得你好像还有一个问题:传值是否为空的判断。如果没有传递过来id,仍然会执行你下面的查询,因为你定义一个string类型的id,所以在查询时("select * from c_users where id='" + id + "'", con)id还是定义的空值,如果你没定义一个string类型的id,则会报错“未将对象引用设置到对象的实例”。解决方法:最好将下面的语句放到if大括号内,再加上else{response.redirect("../Home.aspx");}这类代码。
第二个就是你没有判断是否查询到结果,就直接输出数据。解决方法楼上都说过了。
示例:
private void Bind()
{
string id = "";
if(Request.QueryString["id"]!=null)
{
id = Request.QueryString["id"].ToString();
SqlConnection con = new SqlConnection("Server=.;database=caiwu;uid=sa;pwd=123");
con.Open();
SqlDataAdapter aaa = new SqlDataAdapter("select * from c_users where id='" + id + "'", con);
DataSet ds = new DataSet();
aaa.Fill(ds);
if(ds.Tables[0[.rows.count > 0)
{
this.User.Text = ds.Tables[0].Rows[0]["users"].ToString();
this.Pwd.Text = ds.Tables[0].Rows[0]["pwd"].ToString();
con.Close();
}
else
{
Response.Write("<script>alert('无查询结果!');</script>");
}
}
else{Response.redirect("../Home.aspx");}
}本回答被网友采纳