[ADO.NET]DataSet與DataAdapter,為何不需要自己寫程式去開啟資料庫連線與關閉之?

摘要:DataSet與DataAdapter,為何不需要開啟資料庫連線與關閉之?

我加上一行程式,您運作看看就懂了。

 

有一位讀者來信詢問書本(ASP.NET專題實務 / 文魁出版)裡面,

第十四章講述 DataSet的這一句話:

DataSet(資料集)可獨立於任何資料來源之外,而進行資料存取。

因為DataSet一旦連接到資料來源(如:資料庫)並透過DataAdapter取得資料後,就會立刻離線,並且把獲得的資料放在主機的記憶體裡面,等待日後應用。

因此DataSet是一種 "離線(Disconnect)"的資料存取,不需要長時間與資料來源保持連接的狀態

 

==============================================================================

 其實,只用文字來解釋,很難瞭解程式與裡面的道理。

就好像練武功,

一直背誦口訣,但從來不下場練習.......口訣也是白念。

觀念還是抽象、還是不懂

 

我在書本原有的範例,加上 2行程式碼(請看下面的第13 / 21行

 

一執行,您就懂了! 

01       Dim Conn As New SqlConnection("資料庫連線字串")
02
03       Dim myAdapter As SqlDataAdapter = New SqlDataAdapter("select * from test", Conn)
04
05       Dim ds As New DataSet
06
07
08       ' ---- 不用寫Conn.Open() ,DataAdapter會自動開啟
09
10       '***********************************
11       '*** .Fill()方法之後,資料庫連線就中斷囉!
12       '---------------------------------------------------------
13       Response.Write("<hr />1. Fill()方法之前,資料庫連線 Conn.State ---- " & Conn.State.ToString() & "<hr />")
14       '***********************************
15
16       myAdapter.Fill(ds, "test")    '---- 執行SQL指令。取出資料,放進 DataSet。
17
18       '***********************************
19       '*** .Fill()方法之後,資料庫連線就中斷囉!
20       '---------------------------------------------------------
21       Response.Write("<hr />2. Fill()方法之後,資料庫連線 Conn.State ---- " & Conn.State.ToString() & "<hr />")
22       '***********************************
23
24       GridView1.DataSource = ds
25       GridView1.DataBind()
26
27
28       '---- 不用寫,DataAdapter會自動關閉
29       'If (Conn.State = ConnectionState.Open) Then
30       '  Conn.Close()
31       '  Conn.Dispose()
32       'End If

 

--------------------------------------------------------------------------------------------------------------

在公布答案之前,給你猜一猜:

第一個 Conn.State的結果是?

第二個 Conn.State的結果是?

 

 

 

 

 

 

 

答案很特別,兩個 Conn.State都是「Close」的狀態

哈哈哈哈~~~想不到吧??

 

您可以發現:

程式中的第8行,並沒有寫上 Conn.Open() 以開啟資料庫的連線。但程式一樣可以執行順暢,因為會自動開啟資料庫的連線。

第16行,DataAdapter執行 .Fill()方法之後,資料庫的連線就自動離線了。不信的話,我寫上第13 / 21行以資證明。
這幾行程式,就是上面的文字敘述 ---- 因為DataSet一旦連接到資料來源(如:資料庫)並透過DataAdapter(資料配接器)取得資料後,就會立刻離線

因此最後(第29~32行)也不需要自己寫程式去作 Conn.Close()

 

 

有沒有比較好瞭解呢?

用「程式」來印證書本上的觀念,

用「動手作」來輔助腦袋的理解

事情就很簡單囉。 

 

ADO.NET的 DataReader與 DataSet是很基礎的資料存取觀念,

能實作它,就會懂得快。

 

相關文章:

[ADO.NET] DataReader的標準範例 for ASP.NET 2.0 / 3.5

使用 Using...End Using區塊來寫程式,要非常小心!

資料集(DataSet)與微軟MSDN文件

[DataSet]查詢結果 自訂分頁,使用DataAdapter的 .Fill()方法

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

 初探ADO.NET #1,程式與資料庫互動的四大步驟

初探ADO.NET #2,DataReader 與 DataSet(資料集)

 

 

 

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

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

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

線上課程教學,遠距教學 (ASP.NET MVC 約75~88hr)  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~ 88小時...... 第一天(5.5小時)完整內容,"免費"讓您評估