当前位置:编程学习 > C#/ASP.NET >>

报DataReader未关闭错误,请问如何解决?

报错:已有打开的与此命令相关联的 DataReader,必须首先将它关闭。
在这个函数报错:UpdateTable(JewelleryDataSet changedData, String tableName, DateTime lastAccessed)

代码如下:
public int UpdateTable(JewelleryDataSet changedData, string tableName, DateTime lastAccessed)
        {
            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;
        }
--------------------编程问答-------------------- --------------------编程问答-------------------- 可我的代码里没有用到DataReader啊,我怎么去关闭DataReader呢,我的代码都是用Adaper来把数据装填到DataTable里面啊

完整的异常信息如下:
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错误 --------------------编程问答--------------------
引用 15 楼 zgf_along 的回复:
ret = pictrueArgsTableAdapter.Update(changedData);
跟踪这个方法 进去看看...

这代码是webseveic端的代码没法跟踪啊,只能把需要看的内容写入log里 --------------------编程问答--------------------
引用 16 楼 zgf_along 的回复:
是update方法
如果你的DBHelper方法封装的不好的话,修改数据的方法执行错误后,会出现未关闭DataReader错误

能说的更详细点吗?DBHeplper封装的不好是是吗意思呢,比较菜请多指教! --------------------编程问答-------------------- 各位大侠帮帮忙啊
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,