我與邏輯遺留代碼如下所示:出現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
是什麼原因呢?
謝謝。
當使用塊退出時,它應該調用close和處置,儘管這可能不是罪魁禍首,但代碼無論如何都是不必要的。 – Tejs 2012-04-27 18:04:07
Tejs是對的 - '使用'是正確的路要走。 .Close()不是必需的,但這不會導致您的問題。我懷疑讀取過程中連接發生了什麼 - 可能是關閉它的另一個線程? – n8wrl 2012-04-27 18:07:42
我知道使用block退出時,它關閉並處理連接,但堆棧跟蹤提到了datareader正在關閉的行#,因此我對該錯誤的原因感到有點困惑。 – parsh 2012-04-27 18:09:35