2012-02-21 98 views
3

嗨我試圖從方法返回DataReader,但它返回一個關閉的DbDataReader對象。任何想法來解決這個問題。我願意提供更好的代碼。DbDataReader錯誤:讀取器關閉時嘗試調用無效

感謝

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;'上放置了一個斷點,它在這一點上是否關閉? – 2012-02-21 16:39:26

+0

嗨@NeilKnight,是它在那個時候關閉了 – Scorpion 2012-02-21 16:42:45

+0

你可能還想考慮一下你的空catch塊。你當然不想吞下所有的例外,是嗎? – 2012-02-21 16:55:11

回答

6

它因爲關閉了數據庫連接而關閉。它無法從關閉的SqlConnection中讀取數據。如果要重新使用連接,可以將Open連接傳遞給方法,並在從DbDataReader中使用數據後關閉連接。

+0

嗨@Adriano,如果我離開連接打開它會是一個問題? – Scorpion 2012-02-21 16:49:56

+2

您必須儘快關閉連接(服務器的連接是有限的資源),即使它稍後將由垃圾收集器釋放。這不會**意味着你必須立即關閉連接**,花時間消耗數據,然後關閉連接。 – 2012-02-21 17:03:18

相關問題