2012-04-27 54 views
0

我与逻辑遗留代码如下所示:出现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是什么原因呢?

谢谢。

+2

当使用块退出时,它应该调用close和处置,尽管这可能不是罪魁祸首,但代码无论如何都是不必要的。 – Tejs 2012-04-27 18:04:07

+1

Tejs是对的 - '使用'是正确的路要走。 .Close()不是必需的,但这不会导致您的问题。我怀疑读取过程中连接发生了什么 - 可能是关闭它的另一个线程? – n8wrl 2012-04-27 18:07:42

+0

我知道使用block退出时,它关闭并处理连接,但堆栈跟踪提到了datareader正在关闭的行#,因此我对该错误的原因感到有点困惑。 – parsh 2012-04-27 18:09:35

回答