這裡的文章是我個人的備份。
如果要閱讀原文,請到我的主網站: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行)
一執行,您就懂了!
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]查詢結果 自訂分頁,使用DataAdapter的 .Fill()方法
.....................................................................................................................................................................
初探ADO.NET #2,DataReader 與 DataSet(資料集)
...... 寄信給我 mis2000lab (at) 雅虎.com.台灣 ................................................................................................................
ASP.NET專題實務 (文魁出版,VB版 P8187 / C#版P09027)
.............................................................................................................. 寄信給我 mis2000lab (at) 雅虎.com.台灣 ........
留言列表