DataReader 和 DataSet 的區別

2022-03-28 15:39:07 字數 1376 閱讀 9563

摘自:

第一種解釋

dataset則是將資料一次性載入在記憶體中,拋棄資料庫連線(俗稱:斷開式連線)。讀取完畢即放棄資料庫連線,因為dataset將資料全部載入在記憶體中,所以比較消耗記憶體。但是確比datareader要靈活,可以動態的新增行,列,資料,對資料庫進行回傳,更新操作等。

第二種解釋

使用datareader與dataset都可以從資料來源讀取資料。datareader本身是通過idbcommand.executereader()方法進行構建的;而dataset則是通過dbdataadapter.fill()方法進行填充。此外,兩者的工作方式有明顯的不同:datareader的執行過程不能脫離資料庫連線,也就是在datareader讀取資料的時候不能夠使用idbconnection.close()方法關閉資料庫連線;而在使用dataset獲取資料時,可以斷開資料庫的連線,因為此時dbdataadapter已經負責將資料獲取到應用伺服器中了。

由於有這樣的區別,所以在開發資料庫相關程式時需要特別注意。例如在使用datareader獲取資料後,應該主動地關閉資料庫連線,否則可能出現資料庫連線池溢位的異常。

第三種解釋

可以使用datareader類的物件或dataset類的物件從資料庫讀取資料,但它們是有區別的,歸納起來大致有以下幾條:

1.       datareader是資料管理提供者類,而dataset是一般性資料類。

2.       dataset獲取資料需要通過橋梁dataadapter的填充,由於datareader本身就是管理提供者,它可以通過command的executereader()方法就可以獲取資料。

4.       datareader只能正向讀取資料,但不能修改資料;dataset可以按任何順序讀行,可以按靈活的方式搜尋、排序和過濾這些行,甚至可以改變這些行,然後將這些改變同步到資料庫中。

5.       從datareader讀取資料的速度快於dataset。

6.       由於dataset是離線處理,所以當在事務處理中要鎖定資料庫時,不可以使用dataset。因為當dataset被填充以後,會自動斷開與資料庫的連線,此時不可能再對資料庫進行鎖定。

可以看出,在通常情況下,dataset與 datareader可能可以相互代替,當有特定要求時卻需要仔細分析,到底使用哪種方式更合適。

補充經驗:大資料量上使用dataset和datareader混用,當單錶資料量很大時,使用dataset是一種很不明智的選擇,因為dataset是以datatable記憶體形式存放資料,一次性將很大資料放入記憶體,這是非常吃記憶體的。相比dataset,datareader就顯得優雅很多,它是每次只讀取一條資料,然後迴圈呼叫機制。但它也有弊端,就是相對非斷開連線,但是對記憶體消耗而言這是有利的。dataset在大部分應用場景下也是有自己優點的,比如充分解耦、一次操作、領域模型操作等。

抉擇 是用DataReader還是DataSet

ado.net提供了兩個主要的類來讀取資料。通過本文我們可以學習如何在兩者之間進行選擇。我 經常聽到有人問這個問題 在asp.net web應用程式中我應該用datareader類還是dataset類呢?在很多文章以及新聞組的貼子中 我經常看到這樣的誤解,即認為datareader sqldatar...

DataTable和DataReader的遍歷

1 datatable的遍歷 建立資料表 datatable dt getdatatable select from student 儲存資料 stringbuilder sb new stringbuilder 迴圈遍歷 逐行遍歷 foreach datarow row in dt.rows 獲取...

datareader和dataset的區別

dataset是乙個記憶體資料庫,你取資料的時候可以把資料放進去,資料取完就可以斷開連線了,這樣你就可以在dataset中去取資料,和資料庫就無關了。這樣非常方便,但有個問題,你把資料放記憶體裡,是要占用記憶體空間的,如果這個dataset中放了很多資料的話,效率就有問題了,你在乙個大的datase...