DataRead和DataSet的異同

2022-01-16 06:53:00 字數 1255 閱讀 2743

第一種解釋

第二種解釋

使用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在大部分應用場景下也是有自己優點的,比如充分解耦、一次操作、領域模型操作等。

所以要根據不同場景合理使用這兩種物件。 

SqlDataReader和DataSet的選擇

幾乎在每次面試的時候都會被問道這個問題。使用.net開發當中讀取資料應該採用sqldatareader 還是dataset以及對這兩者的理解。先來談談我本人對這兩者的理解 1 sqldatareader 提供一種從sql server 資料庫讀取行的只進流的方式。無法繼承此類。白話解釋就是 使用這個...

將DataReader轉換成DataSet

import namespace system.data import namespace system.data.oledb html head runat server script language vb runat server function convertdatareadertodat...

把Excel檔案的資料匯入到DataSet資料集中

前幾天做了這樣的匯入,當時在網上找了很多例子,都不錯。但是由於本機的一些設定原因,有一些 不能執行,最後找到乙個可行性的方法來實現這個功能 filepath為檔案的路徑 public static datatable import string filepath catch if canopen e...