SqlDataReader是一個向前的指針,本身并不包含數據,調用一次Read()方法它就向前到下一條記錄,一個SqlDataReader必須單獨占用一個打開的數據庫連接。
在使用 SqlDataReader時,關聯的 SqlConnection 正忙于為 SqlDataReader 服務,對 SqlConnection 無法執行任何其他操作。除非調用 SqlDataReader 的 Close 方法,否則會一直處于此狀態。
SqlDataAdapter象一座橋梁,一頭連起數據庫表,一頭連起一個 DataSet 或者 DataTable ,在把數據庫中的數據填充到 DataSet 或 DataTable 后就可以“過河拆橋”,不用再連接到數據庫,而可以直接從 DataSet 或 DataTable 中獲取數據。
SqlDataAdapter提供了許多的方法,來方便我們對一些特定的數據集合進行操作比如,填充一個查詢結果到 DataTable ,或 DataSet 中其實就是類似于:創建一個 SqlCommand 然后執行 "Select * from [Table]" 然后執行 ExcuteReader()方法 得到一個IDataReader對象然后逐行讀取數據并存放到一個集合對象中(如DataTable)經過測試,如果有大量的數據操作最好是自己寫 SqlCommand ,會比SqlDataAdapter操作數據庫快很多
SqlDataReader只能讀取數據庫,而且所操作的表必須處于連接狀態,但是要對數據庫進行寫操時,只能借助 SqlCommand 類,SqlDataAdapter 它建立在 SqlCommand 對象之上,它具有 SqlCommand 類的一切功能,能夠將數據填充到 DataSet 對象中,而且不用再連接到數據庫,而可以直接從 DataSet 或 DataTable 中獲取數據。(因為它采用的無連接傳輸模式)
SqlDataReader對象可以從數據庫中得到只讀的、只能向前的數據流,還可以提高應用程序的性能,減少系統開銷,同一時間只有一條行記錄在內存中。
SqlDataAdapter對象可以自動打開和自動關閉數據庫連接(不需人為管理),適配器的主要工作流程:SqlConnection 對象建立與數據源的連接,SqlDataAdapter 對象經由 SqlCommand 對象返回給SqlDataAdapter,最后將SqlDataAdapter對象加入到 DataSet 對象的 DataTables 對象中。
總結:
性能上:SqlDataReader一次只在內存中存儲一行,減少了系統開銷。優于SqlDataAdapter。
讀取時:SqlDataReader需通過調用自身Read()方法循環讀取數據到指定對象。而SqlDataAdapter可通過調用Fill()方法一次性填充數據到DataSet。還可將對 DataSet 所做的更改解析回數據源。
操作上:SqlDataReader需通過調用自身的Close()方法斷開連接。而SqlDataAdapter可以讀取完數據庫后自動斷開連接.
微軟擴展閱讀:https://msdn.microsoft.com/zh-cn/zh-ch/library/ms254931.aspx
新聞熱點
疑難解答