C#使用SqlDataReader讀取數據庫數據時CommandBehavior.CloseConnection參數的作用


主要用在ExecuteReader(c)中,如果想要返回對象前不關閉數據庫連接,須要用CommandBehavior.CloseConnection; CloseConnection解決了流讀取數據模式下,數據庫連接不能有效關閉的情況。當某個XXXDataReader對象在生成時使用了CommandBehavior.CloseConnection,那數據庫連接將在XXXDataReader對象關閉時自動關閉。

由於流模式讀取數據庫的特點,在具體應用時很難確定數據庫連接何時才能被關閉,因為讀取的動作是連續進行的,下面是一個常見的數據訪問層的靜態方法:

/// <summary> 
/// 常見的獲取SqlDataReader方法
/// 通常的數據訪問層都會提供這個方法
/// </summary>
static SqlDataReader GetReader()
{
    //通過連接字符串獲取連接
    SqlConnection con = new SqlConnection(conn_String);
    try
    {
        //打開連接,執行查詢,並且返回SqlDataReader
        con.Open();
        SqlCommand cmd = con.CreateCommand();
        cmd.CommandText = Sql;
        SqlDataReader dr = cmd.ExecuteReader();
        //SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
        return dr;
    }
    finally
    {
        //這里的代碼處於兩難的境地,如果這里執行關閉:con.Close();那返回的SqlDataReader將毫無用處,因為其依賴的連接已經關閉
        //如果這里不執行con.Close();那返回后該連接將永遠無法關閉,因為調用方無法得到連接對象con,無法在調用處執行關閉
    }
}  

正如代碼注釋里描述的那樣,這樣的方法既不能關閉連接,也不能保持連接打開狀態。很多系統為了解決這樣兩難的境地,只能放棄使用Reader模式的數據源,或者把連接對象交給方法調用者,以便進行關閉。
而CommandBehavior.CloseConnection的功能恰好就是為了避免類似的尷尬境地,它能夠保證當SqlDataReader對象被關閉時,其依賴的連接也會被自動關閉CommandBehavior.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM