如果你看懂了ADO.NET是什麼 這篇文章,可以知道DataSet 是有別於以往ADO的資料存取DataReader的地方,DataSet,它是一個離線運作的資料集。
DataSet怎麼離線存取:離線存取的大原則就是,能不要和資料庫連線就不要連,存取server端資料本來就會消耗硬體資源,所以連線能少一點就少一點,打個比方:當開啟購物網站的頁首時,要update最新商品,如果每上去觀看一次就要去資料庫撈一次資料那資料庫一定不勝負荷。
所以DataSet的設計是,當客戶端應用程式在使用資料庫資料時,並不需要持續和實體資料庫連線,而是利用「本機 (放ASP.NET網站的那台機器)」裡一部分記憶區塊構築一個虛擬的「資料庫」,但沒這麼大,只是先暫存brower那端要求的資料,這個就是DataSet,國語叫資料集。而資料集在browser反應更新、新增、刪除、觀看某些資料過程中,適時的開關與資料庫的連線。
DataSet資料集的架構
下圖是DataSet資料集的架構,其實和實體資料庫非常類似:DataSet裡面由一個以上的DataTable所組成,DataTable物件每一筆紀錄就是一個DataRow物件,每筆紀錄裡的欄位是由一個個的DataColumn所組成,二個以上的DataTable就是用DataRelation來關聯。然後用DataView來把所有的DataTable物件資料輸出成我們想要閱讀的方式(如排序、篩選)。
底下再把ADO.NET二大重要物件比較一下
資料來源是以 MS SQL Server為例 | DataSet | DataReader |
連接資料庫 (Connection) | 不需要,因為SqlDataAdaper會自動開啟連結,使用後自動關閉 | SqlConnection.Open() |
執行SQL指令 1.Select 2.Delete/Update/Insert | SqlDataAdaper 1..Fill()方法 2..Update()方法 | SqlCommand 1..ExecuteReader()方法 2..ExecuteNonQuery()方法 |
資料指標的移動 | DataSet類似資料庫行為的資料快取,這些資料存在記憶的裡,所以可較靈活操作內部資料 | 讀取資料只能「順向」「只讀」 |
如何處理資料庫與資料表 | 處理複雜的資料庫關聯與多個DataTable、DataView | 透過使用者自訂的SQL指令來存取。適合處理單一資料表。 |
消耗資源 | 較大 | 較小 |
分頁功能(Pading) | 有 | 無 |
再一張圖 (來源:http://www.ibm.com/developerworks/data/library/techarticle/0309mcgee/0309mcgee.html)
沒有留言:
張貼留言