IndexOutOfRange异常不能再现(40分)
各位前辈你们好!
今天在系统上线之后,用户反映出一个问题。
就是:
indexoutofrangeexception:在位置-1处没有任何行。
根据用户执行的操作。我回到自己的开发环境中用断点跟踪。发现完全没有问题。
而其中唯一可能出现用-1定位tables的地方就是一个if判断语句的失效情况。
if (sqlValidate(-1, this.menu.SelectedValue, _Content)){执行保存操作}
sqlValidate 函数定义如下
public bool sqlValidate(int ID, string Wei_ID, string Content)
{
BLL.Wei_D bllD = new BLL.Wei_D();
int Wei_id = int.Parse(Wei_ID.Trim());
if (!bllD.ExistsD(ID, Wei_id, Content)){一些执行提示的语句以及renturn}
}
ExistsD定义如下
public bool ExistsD(int ID, int Wei_ID, string DContent)
{
if (ID != -1)
{
Model.Wei_D modelD = new Model.Wei_D();
BLL.Realation_Wei_D bllrgd = new Realation_Wei_D();
DataSet ds = new DataSet();
ds = bllrgd.GetList(" Wei_ID=" + Wei_ID.ToString() + "and D_ID <>" + ID.ToString());
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
string strID = ds.Tables[0].Rows[i][ds.Tables[0].Columns.Count - 1].ToString();
modelD = GetModel(int.Parse(strID));
if (modelD.D_Content == DContent)
return false;
}
return true;
}
else {
return !(dal.ExistsD(Wei_ID, DContent));
}
}
整个过程中,除了ID变量被我赋值为-1,没有其他任何变量的值为-1.
如果说,在-1处出现问题,那么只能是if(ID!=-1)判定失败(我自己推测)。
但是,我觉得自己想的太不靠谱了。
所以上来问问各位前辈。
这种在客户那边随机出现的问题,应该如何再现?
应该如何解决呢?
------解决方案--------------------
日志记录exception和context
------解决方案--------------------
你的假设有误区,if(ID!=-1)判定失败的可能性是不存在的。
就你贴出来的那点代码,问题很可能在下面2行中的一处:
string strID = ds.Tables[0].Rows[i][ds.Tables[0].Columns.Count - 1].ToString();
modelD = GetModel(int.Parse(strID));
如果这里ds.Tables[0].Columns.Count == 0,那么第一行代码将报错。
如果第二行的GetModel内部有问题,执行GetModel也可能报错。