报DataReader未关闭错误,请问如何解决?
报错:已有打开的与此命令相关联的 DataReader,必须首先将它关闭。在这个函数报错:UpdateTable(JewelleryDataSet changedData, String tableName, DateTime lastAccessed)
代码如下:
public int UpdateTable(JewelleryDataSet changedData, string tableName, DateTime lastAccessed)--------------------编程问答-------------------- --------------------编程问答-------------------- 可我的代码里没有用到DataReader啊,我怎么去关闭DataReader呢,我的代码都是用Adaper来把数据装填到DataTable里面啊
{
int ret = 0;
string SqlInfo = "" ;
try
{
if (changedData != null)
{
switch (tableName)
{
case "AcceptRegister":
ret = acceptRegisterTableAdapter.Update(changedData);
break;
case "BaseInfo":
ret = baseInfoTableAdapter.Update(changedData);
break;
case "Base":
ret = baseTableAdapter.Update(changedData);
break;
case "Branch":
//Debugger.Break();
ret = branchTableAdapter.Update(changedData);
break;
case "CheckResult":
ret = checkResultTableAdapter.Update(changedData);
break;
case "Code":
ret = codeTableAdapter.Update(changedData);
break;
case "CustomerInfo":
ret = customerInfoTableAdapter.Update(changedData);
break;
case "DataMaintain":
ret = dataMaintainTableAdapter.Update(changedData);
break;
case "DateInfo":
ret = dataInfoTableAdapter.Update(changedData);
break;
case "GroupInfo":
ret = groupInfoTableAdapter.Update(changedData);
break;
case "Print":
ret = printTableAdapter.Update(changedData);
break;
case "Role":
ret = roleTableAdapter.Update(changedData);
break;
case "User":
ret = userTableAdapter.Update(changedData);
break;
case "UserRole":
ret = userRoleTableAdapter.Update(changedData);
break;
case "Template":
ret = templateTableAdapter.Update(changedData);
break;
case "StoneValue":
ret = StoneValueTableAdapter.Update(changedData);
break;
case "StonePram":
ret = StonePramTableAdapter.Update(changedData);
break;
case "PictrueArgs":
ret = pictrueArgsTableAdapter.Update(changedData);
break;
case "DataUpdateInfo":
ret = dataUpdateInfoTableAdapter.Update(changedData);
break;
}
}
}
catch (SqlException sqlEx)
{
log.Debug(string.Format("A problem was encounted updating Table: \n{0}", sqlEx.ToString()));
throw new SoapException("写入数据库出错", SoapException.ServerFaultCode, "Database");
}
catch (Exception ex)
{
log.Debug("行数量" + changedData.CheckResult.Rows.Count.ToString()
+ "行状态:" + changedData.CheckResult.Rows[0].RowState.ToString()
+ "重量:" + changedData.CheckResult.Rows[0]["Weight"].ToString()
+ "图片编号:" + changedData.CheckResult.Rows[0]["PhotoGID"].ToString());
log.Debug("Exception:" + ex.ToString());
}
return ret;
}
完整的异常信息如下:
Exception:System.InvalidOperationException: 已有打开的与此命令相关联的 DataReader,必须首先将它关闭。
在 System.Data.Common.DbDataAdapter.UpdatedRowStatusErrors(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount)
在 System.Data.Common.DbDataAdapter.UpdatedRowStatus(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount)
在 System.Data.Common.DbDataAdapter.Update(DataRow[] dataRows, DataTableMapping tableMapping)
在 System.Data.Common.DbDataAdapter.UpdateFromDataTable(DataTable dataTable, DataTableMapping tableMapping)
在 System.Data.Common.DbDataAdapter.Update(DataSet dataSet, String srcTable)
在 JewelleryDataSetTableAdapters.CheckResultTableAdapter.Update(JewelleryDataSet dataSet)
在 Jewellery.Web.JewelleryData.UpdateTable(JewelleryDataSet changedData, String tableName, DateTime lastAccessed) --------------------编程问答-------------------- 你单步调试看下确定你错误的语句, --------------------编程问答-------------------- 这段代码是是websevice上的,所以只能在log里看到,异常信息很明显了,UpdateTable()函数开始产生异常的,大家帮我看看,我的代码里没有DataReader啊,怎么会报这个错呢 --------------------编程问答-------------------- acceptRegisterTableAdapter哪里来的,前面还调用过什么? --------------------编程问答-------------------- 前面调用过,装填数据的函数里用acceptRegisterTableAdapter把数据装填到表里acceptRegisterTableAdapter是类里声明的。 --------------------编程问答-------------------- 大家帮忙看看 --------------------编程问答-------------------- 楼主的问题还没看完,但是看到那么多case语句,不禁想让楼主重构下代码,反射也许可以使代码更清晰一点... --------------------编程问答-------------------- 高手大哥们帮忙看看啊! --------------------编程问答-------------------- 没有close()是一定的 --------------------编程问答-------------------- 每次用完关掉就行了
--------------------编程问答-------------------- --------------------编程问答-------------------- 报错:已有打开的与此命令相关联的 DataReader,必须首先将它关闭。
表示其他地方用到datareader了,记着把它关闭 --------------------编程问答-------------------- 可我代码里没有用到DataReader啊,为马上还会说它打开没有关闭呢,没有用到datareader又如何关闭呢? --------------------编程问答-------------------- ret = pictrueArgsTableAdapter.Update(changedData);
跟踪这个方法 进去看看... --------------------编程问答-------------------- 是update方法
如果你的DBHelper方法封装的不好的话,修改数据的方法执行错误后,会出现未关闭DataReader错误 --------------------编程问答--------------------
这代码是webseveic端的代码没法跟踪啊,只能把需要看的内容写入log里 --------------------编程问答--------------------
能说的更详细点吗?DBHeplper封装的不好是是吗意思呢,比较菜请多指教! --------------------编程问答-------------------- 各位大侠帮帮忙啊
补充:.NET技术 , C#