2009-10-22 47 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對象被佔用,直到垃圾收集器找到並清理它爲止。

相關問題