2014-10-08 41 views
0

我創建了一個小班的輔助方法,針對數據庫的工作。我想了解一下這種方法:是否確定處置命令對象之後,再使用DataReader?

Shared Function GetReader(sql As String, con As OleDbConnection) As OleDbDataReader 

    Dim cmd As New OleDbCommand(sql, con) 
    Dim reader As OleDbDataReader = cmd.ExecuteReader 
    cmd.Dispose() 
    Return reader 

End Function 

我要去碰到某些問題處置首Command對象,然後使用DataReader?

我寧願隨時通過不創建/處理Command對象來調用代碼整潔(在上面的幫助器方法中可能會包含這些對象似乎是多餘的)。

+0

順便說一句,從設計的角度來看,我並不過於擔心一個DataReader返回到調用代碼。輔助方法不會在低級數據庫代碼之外使用。即數據訪問層將不會看到它們。 – misha256 2014-10-08 02:47:31

回答

2

我會遇到某種麻煩,首先處理命令​​ 對象,然後使用DataReader?

沒有

但是,這是一個更乾淨的代碼:

Shared Function GetReader(sql As String, con As OleDbConnection) As OleDbDataReader 

    Using cmd As New OleDbCommand(sql, con) 
     Dim reader As OleDbDataReader = cmd.ExecuteReader 
     'cmd.Dispose() 'Not needed here, will be invoked automatically 
     Return reader 
    End Using 

End Function 

旁註:

  • 考慮使用Using Statements始終確保所有資源都被釋放

  • 考慮一旦不再需要連接和閱讀器,就要處理連接和閱讀器。不要害怕關閉然後重新打開再次因爲連接是保存在默認情況下,連接池的,你應該儘快關閉它們 - 特別是如果你的應用是在某種形式的負荷 -

+0

+1,關於使用'使用'的注意事項。 – 2014-10-09 01:44:31

0

這段代碼沒什麼不對,在執行cmd.Dispose()之前,您將查詢結果分配給閱讀器即Dim reader As OleDbDataReader = cmd.ExecuteReader,所以讀者在處理完cmd之後仍然有結果。它會保持可貴的連接得到closed否則reader .Dispose() occures。

相關問題