C# InvalidOperationException:SqlDataReader.Close()处的内部连接严重错误
我有如下逻辑的遗留代码:C# InvalidOperationException:SqlDataReader.Close()处的内部连接严重错误,c#,sqldatareader,C#,Sqldatareader,我有如下逻辑的遗留代码: using (SqlDataReader drColor = ColorDal.GetColors()) { if (drColor.HasRows) { string colorCacheKey = string.Empty; //_log.Debug("Total Color Count loaded from database: " + dsColor.Tables.Count.ToString()); // Re
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.runBehavior,
SqlCommand cmdHandler、SqlDataReader数据流、,
BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject
stateObj+6355814
System.Data.SqlClient.SqlDataReader.CloseInternalBoolean closeReader
+308
System.Data.SqlClient.SqlDataReader.Close+293
使用{}关闭内部的SqlDataReader可能是原因吗
谢谢。这可能会有所帮助…不确定他们在处理此错误时处于何处,但它可能会为您提供一个起点:
当using块退出时,它应该调用close和dispose,因此虽然这可能不是罪魁祸首,但代码无论如何都是不必要的。不需要.Close,但这不会导致您的问题。我怀疑在读取过程中Connection发生了什么-可能是另一个线程关闭了它?我知道当退出using block时,它会关闭并处理连接,但是堆栈跟踪提到了datareader关闭的行,因此我对错误的原因感到有点困惑。