2009-10-22 44 views
1

我收到以下错误;与此命令关联的DataReader必须先关闭

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

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

foreach(Apple a in listApple) 
{ 


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


..... 

} 
+0

这是我的错误。我在深入调查中发现它。 我一直在使用if(reader.Read())而不是使用using和whil循环。 全部解决。 谢谢 bk – theklc 2009-10-22 13:07:51

回答

1

尝试以下操作:

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

如果它没有做任何事情,或者实际上*更糟糕*比毫无意义*看起来像它应该做某事那么毫无意义。 – Guffa 2009-10-22 12:43:34

3

你implemeneted的SmartSqlReader当它设置为关闭?常规数据读取器实现IDisposable接口并从Dispose方法调用Close。

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

相关问题