轉(zhuǎn)自:http://blog.sina.com.cn/s/blog_7bb5e6b70101ay5v.html
從數(shù)據(jù)量級來說情组,OleDbDataAdapter的Fill過程較慢(寫內(nèi)存),一般用于小型數(shù)據(jù)處理填大;OleDbDataReader屹蚊,一般用于大型數(shù)據(jù)處理∈踅。【經(jīng)過測試兵多,如果有大量的數(shù)據(jù)操作劣像,最好是自己寫OleDbCommand乡话,會比OleDbDataAdapter操作數(shù)據(jù)庫快很多。
DataReader是一個向前的指針耳奕,本身并不包含數(shù)據(jù)绑青,調(diào)用一次Read()方法它就向前到下一條記錄,一個DataReader必須單獨占用一個打開的數(shù)據(jù)庫連接屋群!在使用 OleDbDataReader 時闸婴,關(guān)聯(lián)的 OleDbConnection 正忙于為 OleDbDataReader 服務,對leDbConnection 無法執(zhí)行任何其他操作芍躏。除非調(diào)用 OleDbDataReader 的 Close 方法邪乍,否則會一直處于此狀態(tài)。
DataAdapter象一座橋梁对竣,一頭連起數(shù)據(jù)庫表庇楞,一頭連起一個DataSet或者DataTable,在把數(shù)據(jù)庫中的數(shù)據(jù)填充到DataSet或DataTable后就可以“過河拆橋”否纬,不用再連接到數(shù)據(jù)庫吕晌,而可以直接從DataSet或DataTable中獲取數(shù)據(jù)。
OleDbDataAdapter提供了許多的方法临燃,來方便我們對一些特定的數(shù)據(jù)集合進行操作比如睛驳,填充一個查詢結(jié)果到DataTable,或DataSet中其實就是類似于:創(chuàng)建一個OleDbCommand然后執(zhí)行Select * from 表名然后執(zhí)行ExcuteReader()方法得到一個IDataReader對象然后逐行讀取數(shù)據(jù)并存放到一個集合對象中(如DataTable)
經(jīng)過測試,如果有大量的數(shù)據(jù)操作最好是自己寫OleDbCommand膜廊,會比OleDbDataAdapter操作數(shù)據(jù)庫快很多 OleDbDataReader只能讀取數(shù)據(jù)庫乏沸,而且所操作的表必須處于連接狀態(tài),但是要對數(shù)據(jù)庫進行寫操時溃论,只能借助OleDbCommand類屎蜓,OleDbDataAdapter它建立在oleDbCommand對象之上痘昌,它具有oleDbCommand類的一切功能钥勋,能夠?qū)?shù)據(jù)填充到DataSet對象中炬转,而且不用再連接到數(shù)據(jù)庫,而可以直接從DataSet或DataTable中獲取數(shù)據(jù)算灸。(因為它采用的無連接傳輸模式)
使用DataReader對象可以從數(shù)據(jù)庫中得到只讀的扼劈、只能向前的數(shù)據(jù)流,還可以提高應用程序的性能菲驴,減少系統(tǒng)開銷荐吵,同一時間,只有一條行記錄在內(nèi)存中赊瞬。
OleDbDataAdapter對象可以自動打開和自動關(guān)閉數(shù)據(jù)庫連接先煎,適配器的主要工作流程:OleDbConnection對象建立與數(shù)據(jù)源的連接,OleDbDataAdapter對象經(jīng)由OleDbCommand對象返回給OleDbDataAdapter巧涧,最后將OleDbDataAdapter對象加入到DataSet對象的DataTables對象中薯蝎。