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

來源:互聯網
上載者:User

標籤:

主要用在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.

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.