這裡的文章是我個人的備份。
如果要閱讀原文,請到我的主網站:http://www.dotblogs.com.tw/mis2000lab/


本篇文章的原始出處(原文),位於:

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

 

http://www.dotblogs.com.tw/mis2000lab/archive/2009/11/26/dataset_dataadapter_connection_open.aspx

 

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

 

 

有一位讀者來信詢問書本(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(資料集)

 

 


 

 

......  寄信給我    mis2000lab (at) 雅虎.com.台灣 ................................................................................................................
ASP.NET專題實務  (文魁出版,VB版 P8187 / C#版P09027

.............................................................................................................. 寄信給我    mis2000lab (at) 雅虎.com.台灣 ........

創作者介紹

MIS2000 Lab -- ASP.NET專題實務 / 線上教學文件

MIS2000 Lab 發表在 痞客邦 PIXNET 留言(0) 人氣()