標籤:
主要用在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參數的作用