[ADO.NET] DataReader 與 CommandBehavior補充說明

摘要:[ADO.NET] DataReader 與 CommandBehavior補充說明

 

 

上一篇文章

[ADO.NET] DataReader的標準範例 for ASP.NET (Code Behind版) #2 -- CommandBehavior

 

有位學員來信提到了這個方法

MSDN的說明是 --  DataReader關閉的時候,也會自動關閉資料庫的連結(自動關閉 Connection)

 

所以我寫了一段小範例,讓大家看見「成果」

Youtube教學影片 -- https://youtu.be/ezUkSplub1E

 

 

請問下面的三個DB連結(連線)狀況是?開啟?或是關閉呢?

大家來猜猜看!

 

//----自己寫的(宣告)----
using System.Web.Configuration;  // Web.Config檔的DB連結字串。
using System.Data;
using System.Data.SqlClient;
//----自己寫的(宣告)----

 

        SqlConnection Conn = new SqlConnection(WebConfigurationManager.ConnectionStrings["您放在Web.Config裡面的連結字串"].ConnectionString);
        SqlDataReader dr = null;
        SqlCommand cmd = new SqlCommand("select * from test", Conn);
 
        try       {
            Conn.Open();  //== 第一,連結資料庫。
            //== 第二,執行SQL指令。
            //**************************************************************
            dr = cmd.ExecuteReader(CommandBehavior.CloseConnection); 
            //**************************************************************
 
            //==第三,自由發揮,把執行後的結果呈現到畫面上。
            GridView1.DataSource = dr;
            GridView1.DataBind();    //--資料繫結
            Response.Write("(1). DB連結狀況:" + Conn.State + "<br><br>");
        }
        catch (Exception ex)
        {  //---- 如果程式有錯誤或是例外狀況,將執行這一段   http://www.dotblogs.com.tw/billchung/archive/2009/03/31/7779.aspx
            Response.Write("<b>Error Message----  </b>" + ex.ToString() + "<HR />");
        }
        finally        {
            // == 第四,釋放資源、關閉資料庫的連結。
            if (dr != null)  {
                cmd.Cancel();
                dr.Close();
             }
            Response.Write("(2). DB連結狀況:" + Conn.State + "<br><br>");
 
            if (Conn.State == ConnectionState.Open)  {
                Conn.Close();
                Conn.Dispose(); 
            }
            Response.Write("(3). DB連結狀況:" + Conn.State + "<br><br>");
        }

......

......

......

......

......

......答案是:

三個都是關閉的。  Conn.State皆為 Close狀態。

 

由此可知,當DataReader被讀取完成之後,

CommandBehavior.CloseConnection也會順便把 Connection連結給「關閉」了

 

之前有一篇文章(範例)的成果,可以拿來比對。

也是 DataReader 相同的現象,請您參閱

第一天 ADO.NET Samples -- DataReader v.s. DataSet與DataTable

 

我們在上課的時候提到 DataReader 與 DataSet兩者的差異   也提醒各位其中的觀念與作法不同

強烈建議您看完這篇文章 與 裡面的超連結(相關文章):

[ADO.NET] Web Form為求快速,可使用 DataReader直接處理資料來源

 

 

書本或是MSDN的說明,有很多文字、規則

但對於初學者來說,毫無感覺

上課時,必須想一些範例(教案),讓他們「親眼看見」規則就是在說明這個結果

 

如果做不到這種程度,那上課時.....只是拿本書「照本宣科」而已

 

書,是我寫的!

課,是我親自上的!

      我保證:書本裡面每一個「觀念」,我都準備好「範例」,讓您所見即所得!

        光是PostBack以及會帶來的困擾,前三次上課就會不斷出現,所以您會特別注意這個問題

 

這種書,你不買?

這種課,你不來上?

 

您損失可多了  :-)

 

我要報名!請點選下圖。

 

 

 

我將思想傳授他人, 他人之所得,亦無損於我之所有;

猶如一人以我的燭火點燭,光亮與他同在,我卻不因此身處黑暗。----Thomas Jefferson

線上課程,遠距教學 (Web Form 49hr)  https://dotblogs.com.tw/mis2000lab/2016/02/01/aspnet_online_learning_distance_education_VS2015

線上課程,遠距教學 (ASP.NET MVC 75hr)  https://dotblogs.com.tw/mis2000lab/2018/08/14/ASPnet_MVC_Online_Learning_MIS2000Lab

ASP.NET MVC線上課程 第一天 免費看 (5.5小時) 

寫信給我,不要私訊 --  mis2000lab (at) yahoo.com.台灣  或  school (at) mis2000lab.net


ASP.NET遠距教學、線上課程(Web Form + MVC)。 第一天課程, "完整" 試聽。 

................   facebook社團   https://www.facebook.com/mis2000lab   ......................

................  YouTube (ASP.NET) 線上教學影片  https://www.youtube.com/channel/UC6IPPf6tvsNG8zX3u1LddvA/

 

Blog文章 "附的範例" 無法下載,請看 這裡 ...... https://dotblogs.com.tw/mis2000lab/2016/03/14/2008_2015_mis2000lab_sample_download

請看我們的「售後服務」範圍(嚴格認定)

......................................................................................................................................................

...................................................................................................................................................... 

[遠距教學、教學影片] ASP.NET (Web Form) 課程 上線了!MIS2000Lab.主講

事先錄製好的影片,並非上課時側錄!   觀看影片時,有如我「一對一」跟您面對面講課

 

ASP.NET MVC 5 線上教學

累積時數約 75小時...... 第一天(5.5小時)完整內容,"免費"讓您評估