与此命令关联的DataReader必须先关闭

时间:2009-10-22 07:10:36

标签: c# sql sqldatareader

我收到以下错误;

“已经有一个与此命令关联的打开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"); 
                        }
                    }


.....

}

3 个答案:

答案 0 :(得分:3)

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

如果你没有正确关闭它,它将使Command对象保持占用状态,直到垃圾收集器找到读者并清理它。

答案 1 :(得分:1)

添加reader.Close()以关闭SmartSqlReader

答案 2 :(得分:1)

尝试以下方法:

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