问题描述
下面的代码报这样的错误:ArgumentoutofRangException参数名index,请高手指点,if(header.Rows.Count>0)这一段代码是出错后加的,但我不知道是不是这个原因?Tablewareti=newTableware();tableware_Deliverytd=newtableware_Delivery();stringsql="select*fromsendreceiptheaderwhereupdatestatus=0";stringnewautoid="";DataTableheader=sqlce.ExeSqlForDT(sql);if(header.Rows.Count>0){for(inti=0;i<header.Rows.Count;i++){DataRowdr=header.Rows[i];stringcphid=DBhandle.getcphid(dr["cph"].ToString());ArrayListarys=newArrayList();stringsql1="select*fromsendreceiptdetailwhereupdatestatus=0andautoid='"+dr["autoid"].ToString()+"'";DataTabledetail=sqlce.ExeSqlForDT(sql1);Int16khxs=0;Int16khgs=0;DataTabledt=Tableware.getKHStock(dr["khph"].ToString());if(dt.Rows.Count>0){khxs=Convert.ToInt16(dt.Rows[0]["kcxs"].ToString());khgs=Convert.ToInt16(dt.Rows[0]["kcgs"].ToString());}stringAutoid_ck=td.getAutoid_ck(cphid);newautoid=td.getAutoid_ssh(dr["khph"].ToString(),Autoid_ck);if(newautoid==string.Empty){newautoid=DBhandle.Autoid("D","sshid");//开始保存arys.Clear();arys.Add(newautoid);arys.Add(Autoid_ck);arys.Add(dr["khph"].ToString());arys.Add(dr["khmc"].ToString());arys.Add(cphid);arys.Add(DBhandle.getygbh(dr["sfy"].ToString()));arys.Add(dr["sfydh"].ToString());//sfyp送货员电话arys.Add(dr["tsdh"].ToString());//tsp投诉电话arys.Add(dr["hsxs"].ToString());arys.Add(dr["hsgs"].ToString());arys.Add("");//退换产品型号arys.Add("");//退换箱数arys.Add(dr["return_qty"].ToString());//退换套数arys.Add(khxs);//记录当时客户的箱数arys.Add(khgs);//记录当时客户的盖数arys.Add(userid);arys.Add("N");arys.Add("N");arys.Add(dr["autoid"].ToString());tableware_Delivery.savessh("add",arys);}else{arys.Clear();arys.Add(newautoid);arys.Add(dr["hsxs"].ToString());arys.Add(dr["hsgs"].ToString());arys.Add(dr["return_qty"].ToString());//退换套数arys.Add(khxs);//记录当时客户的箱数arys.Add(khgs);//记录当时客户的盖数tableware_Delivery.savessh("upd",arys);}if(Convert.ToInt32(dr["hsxs"].ToString())>0||Convert.ToInt32(dr["hsgs"].ToString())>0){//更新客户库存arys.Clear();arys.Add(dr["khph"].ToString());arys.Add(dr["khmc"].ToString());arys.Add("");arys.Add("-"+dr["hsxs"].ToString());arys.Add("-"+dr["hsgs"].ToString());//盖数arys.Add(DateTime.Now);arys.Add(userid);tableware_Delivery.updateStock_hk("add",arys);}for(intj=0;j<detail.Rows.Count;j++){Int32xs=0;DataRowdr_detail=detail.Rows[j];Int32gs=Convert.ToInt32(DBhandle.getKHgs(dr_detail["cpxh"].ToString(),dr_detail["xs"].ToString()));if(gs==0){xs=Convert.ToInt32(dr_detail["xs"].ToString());}Int32qty=Convert.ToInt32(dr_detail["qty"].ToString());//更新客户库存arys.Clear();arys.Add(dr["khph"].ToString());arys.Add(dr["khmc"].ToString());stringcpxhid=DBhandle.getcpxhid(dr_detail["cpxh"].ToString());arys.Add(cpxhid);arys.Add(xs);arys.Add(gs);//盖数arys.Add(DateTime.Now);arys.Add(userid);stringppid=DBhandle.getppid(dr_detail["pp"].ToString());arys.Add(ppid);tableware_Delivery.updateStock_hk("add",arys);arys.Clear();arys.Add(newautoid);arys.Add("ssh");arys.Add(cpxhid);if(gs>0){arys.Add(gs);}else{arys.Add(xs);}arys.Add(qty);arys.Add(ppid);decimalprice=Convert.ToDecimal(ti.getkhxydj(dr["khph"].ToString(),dr_detail["cpxh"].ToString()));arys.Add(price.ToString());arys.Add((qty*price).ToString());tableware_Delivery.savecj("",arys);}updatelocalsendreceiptheaderstatus(dr["autoid"].ToString());updatelocalsendreceiptdetailstatus(dr["autoid"].ToString());}}
解决方案
解决方案二:
用索引访问数组或者List,超出数组或者List的范围了。debug编译的话,异常信息里有Stacktrace,有行号。实在不行单步跟踪调试一下,这种错误很容易解决。
解决方案三:
解决方案四:
debug技能还是必须的,另外你只说了异常,没写详细的StackTrace,所以也不知道大概问题发生在哪行