2012-04-27 3 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

でしたクロージングSqlDataReaderの内部にusing{}が原因ですか?

ありがとうございました。

+2

ブロックの終了を使用している場合、それは近くに呼び出す必要がありますし、それはおそらく原因ではありませんが、コードはとにかく不必要です。 – Tejs

+1

Tejsが正しい - 「使用する」が正しい方法です。 .Close()は必要ではありませんが、あなたの問題の原因ではありません。私は、読書中に何かが起こっていると思っています。おそらくそれを閉じる別のスレッドでしょうか? – n8wrl

+0

私は、ブロックを使用して終了すると、接続を閉じて処分することを知っていますが、スタックトレースにはデータエリアが閉じられている行番号が記載されています。 – parsh

答えて