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关闭的行,因此我对错误的原因感到有点困惑。