2012-04-27 49 views
0

我與邏輯遺留代碼如下所示:出現InvalidOperationException:在SqlDataReader.Close()內部連接致命錯誤

using (SqlDataReader drColor = ColorDal.GetColors()) 
{ 
    if (drColor.HasRows) 
    { 
     string colorCacheKey = string.Empty; 
     //_log.Debug("Total Color Count loaded from database: " + dsColor.Tables.Count.ToString()); 

     // Retrieve each colorfamily present in the dataset. 
     while (drColor.Read()) 
     { 
     ...... 
     } 
    } 

    drColor.Close(); // This is line # in the exception. 
} 

間歇,我收到以下異常在我的ASP.NET MVC應用程序:

[InvalidOperationException異常:內部連接致命錯誤]
System.Data.SqlClient.TdsParser.Run(runBehavior runBehavior, 的SqlCommand cmdHandler,SqlDataReader的數據流, BulkCopySimpleResultS等bulkCopyHandler,TdsParserStateObject stateObj)6355814
System.Data.SqlClient.SqlDataReader.CloseInternal(布爾closeReader) System.Data.SqlClient.SqlDataReader.Close()293

莫非閉合using{}裏面的SqlDataReader是什麼原因呢?

謝謝。

+2

當使用塊退出時,它應該調用close和處置,儘管這可能不是罪魁禍首,但代碼無論如何都是不必要的。 – Tejs 2012-04-27 18:04:07

+1

Tejs是對的 - '使用'是正確的路要走。 .Close()不是必需的,但這不會導致您的問題。我懷疑讀取過程中連接發生了什麼 - 可能是關閉它的另一個線程? – n8wrl 2012-04-27 18:07:42

+0

我知道使用block退出時,它關閉並處理連接,但堆棧跟蹤提到了datareader正在關閉的行#,因此我對該錯誤的原因感到有點困惑。 – parsh 2012-04-27 18:09:35

回答