【发布时间】:2013-09-23 21:18:44
【问题描述】:
我有旧代码,其逻辑如下所示:
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 数据流、 BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +6355814
System.Data.SqlClient.SqlDataReader.CloseInternal(布尔型 closeReader) +308
System.Data.SqlClient.SqlDataReader.Close() +293
关闭SqlDataReader 内的using{} 可能是导致它的原因吗?
谢谢。
【问题讨论】:
-
当 using 块退出时,它应该调用 close 和 dispose,所以虽然这可能不是罪魁祸首,但无论如何代码都是不必要的。
-
Tejs 是正确的——“使用”是正确的方法。不需要 .Close() ,但这不会导致您的问题。我怀疑在读取过程中连接发生了一些事情 - 也许另一个线程正在关闭它?
-
我知道当退出使用块时,它会关闭并处理连接,但堆栈跟踪提到了数据读取器正在关闭的行#,因此我对原因感到有点困惑对于错误。
标签: c# sqldatareader