sql基本查詢之SqlDataReader 和 SqlDataAdapter 、DataSet和DataTable


   作為數據庫查詢的常用組件,SqlDataReader 和 SqlDataAdapter 、DataSet和DataTable的工作方式和使用效率是不同的。
1.SqlDataReader是個數據讀取器,向前不可后退、每次只讀取一條。速度快,現代項目里面用它用得最多。
(親身體會,SqlDataReader與SqlDataAdapter相比要快很多)

2.SqlDataAdapter是個數據適配器,工作於DataSet和數據庫之間,負責將數據從數據源讀出來放在DataSet中,或將DataSet中的更改更新回數據庫。
3.DataSet是個內存數據庫,數據集,它與其它兩個是根本不一樣的。
4.DataTable是數據表,
DataSet與DataTable的區別是在於DataSet存儲多個DataTable。DataSet和DataTable像是專門存儲數據的一個容器,在你查詢數據庫得到一些結果時可以存在里面。
DataTable功能強大有瀏覽、排序、搜索、過濾、處理分級數據、緩存更改等功能,還可以與XML數據互換。
DataSet中可包括多個DataTable,可將多個查詢結構存到一個DataSet中,方便操作 ADO.NET開發人員為方便數據處理開發出來的,是數據的集合,
為解決DataReader的缺陷設計的,DataReader數據處理速度快,但它是只讀的,一旦移到下一行就不能查看上一行的數據,DataSet則可以自由移動指針。
DataSet的數據是與數據庫斷開的。DataSet還可用於多層應用程序中,如果應用程序運行在中間層的業務對象中來訪問數據庫,則業務對象需將脫機數據結構傳遞給客戶應用程序。

所以以上可以綜合成兩種模式:1是SqlDataReader一條一條讀(通常這后面會跟有實體轉化相關的);2是使用SqlDataAdapter和DataSet。
兩者區別:
上面兩種方案中,比較如下:
1.性能。DataSet中的數據完全保存在內存中,所以會占用內存。但是通常情況下DataReader讀出的數據實例化以后也是在內存中的,所以兩者沒有多大區別。
但是,當數據量極大的情況下,使用DataSet時,不論是你分頁還是不分頁,它的效率之低,和SqlDataReader相比都是不可同日而語的,
尤其是你在分頁情況下,使用DataReader可以只讀所需數據,網絡流量可以很小,但是DataAdapter還是必須全部讀出,網絡流量你很難優化,除非你自己去深入控制。

2.方便。DataSet數據保存在內存中,可以用Adapter一次性填充,乍看方便不少,其實不然。由於dataset中的數據都是弱類型的,你用的時候不得不大量使用索引、強制類型轉換、類型轉換來完成讀取任務,麻煩而且易錯。
從這方便來說,在讀取數據時那么一點方便是不可取的。

3.離線。DataSet是離線的,數據讀取后可以關閉數據庫連接,
但是DataReader則必須在使用數據的時候一直連接數據庫。(親身經歷,數據遍歷取值前關閉了dr,結果無法取值)
現在的項目中大多使用實體(Entity)來保存從DataReader中讀取的數據,也能實現離線的目的,雖然麻煩一點,但是后期很方便使用。

大型項目中,DataReader幾乎是首選,DataSet難覓蹤影。

可參考,http://blog.csdn.net/paullink520/article/details/12774555


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM