2012-02-21 228 views
3

こんにちは、メソッドからDataReaderを取得しようとしていますが、閉じたDbDataReaderオブジェクトが返されています。この問題を解決するためのアイデア。私は、コードをより良くするための提案をしています。DbDataReaderエラー:リーダーが閉じているときにReadを呼び出す試みが無効です

おかげ

UPDATE 私は、データベース接続を開いたままにしたくありません。接続を閉じた後、開いているDataReaderを返す方法はありますか。

internal DbDataReader ExecuteReader(SqlCommand command, CommandBehavior behavior, string connectionString) 
    { 
    DbDataReader dataReader = null; 
    try 
    { 
     SqlConnection connection = GetConnection(connectionString); 
     Open(connection); 
     command.Connection = connection; 
     command.CommandTimeout = 60; 
     dataReader = command.ExecuteReader(behavior); 
     Close(connection); 
    } 
    catch 
    { 
    } 
    return dataReader; 
} 
+0

'return dataReader;'にブレークポイントを設定すると、この時点で閉じますか? –

+0

こんにちは@NeilKnight、はいその時点で閉じた – Scorpion

+0

空のキャッチブロックについて考えることもできます。あなたは確かにすべての例外を飲みたくはありませんか? –

答えて

6

データベース接続をクローズしたため終了しました。閉じたSqlConnectionからデータを読み取ることはできません。接続を再利用する場合は、OPEN接続をメソッドに渡し、DbDataReaderからデータを消費した後に接続を閉じることができます。

+0

こんにちは@Adriano、私は接続を開いたままにしておくと問題になりますか? – Scorpion

+2

後でガベージコレクタによって解放されても、できるだけ早く(サーバーの接続は有限のリソースです)接続を閉じる必要があります。 **これは**接続**をすぐに**閉じる必要があるという意味ではなく、データを消費して接続を閉じる時間がかかることを意味しません。 –