我与逻辑遗留代码如下所示:出现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