1

我收到以下错误;

“已经有一个打开的 DataReader 与此命令关联,必须先关闭它。”

是因为我在 foreach 循环中使用了阅读器吗?或者问题可能是什么?问候 BK

foreach( Apple a in listApple )
{


....
                   using (SmartSqlReader reader = Db.CurrentDb.ExecuteReader(sp))
                    {
                        while (reader.Read())
                        {
                            a.blablabla += reader.GetInt32("BLA_BLA_BLA"); 
                        }
                    }


.....

}
4

3 回答 3

3

您是否实现了 SmartSqlReader 在处置时关闭?常规数据读取器实现 IDisposable 接口并从 Dispose 方法调用 Close。

如果您没有正确关闭它,它将保持 Command 对象被占用,直到垃圾收集器找到读取器并清理它。

于 2009-10-22T07:39:10.437 回答
1

添加reader.Close()关闭SmartSqlReader

于 2009-10-22T07:14:06.480 回答
1

尝试以下操作:

using (SmartSqlReader reader = Db.CurrentDb.ExecuteReader(sp))
 {
  while (reader.Read())
  {
   a.blablabla += reader.GetInt32("BLA_BLA_BLA"); 
  }
  reader.Close();
 }
于 2009-10-22T07:49:48.063 回答