【问题标题】:InvalidOperationException: Internal connection fatal error at SqlDataReader.Close()InvalidOperationException:SqlDataReader.Close() 处的内部连接致命错误
【发布时间】: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


【解决方案1】:

这可能会有所帮助...不确定他们在哪里解决了这个错误,但它可能会给你一个开始的地方:

http://connect.microsoft.com/VisualStudio/feedback/details/772492/internal-connection-fatal-error-system-invalidoperationexception

【讨论】:

    猜你喜欢
    • 2010-11-12
    • 2013-04-19
    • 1970-01-01
    • 2013-11-10
    • 2021-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多