DataReader vs DataSet—哪一個更適合你
在微軟發(fā)布Microsoft .NET Framework之前,程序員訪問數(shù)據(jù)庫數(shù)據(jù)的選擇并不多。那時候,我們常常ADO Recordset來保存查詢結(jié)果和數(shù)據(jù)內(nèi)容。最初,ADO Recordset要求一個恒定的數(shù)據(jù)庫連接來維護(hù)對數(shù)據(jù)的訪問。但隨著時間的推移,它的功能逐步增強,現(xiàn)在它即支持離線應(yīng)用程序又能夠?qū)U展標(biāo)記語言(eXtensible Markup Language,XML)提供部分支持。
ADO.NET的發(fā)布提供了一個新的數(shù)據(jù)檢索對象模型。目前,它提供了兩個用于獲取檢索結(jié)果的數(shù)據(jù)類以及其它用于保存各種數(shù)據(jù)內(nèi)容的類。由于大多數(shù)程序員已經(jīng)習(xí)慣于只使用Recordset,這就導(dǎo)致了這樣如下兩個疑問:為什么在Microsoft.NET提供兩種數(shù)據(jù)檢索類(DataReader和DataSet)以及哪一個類最好用。
你可以利用如下信息來幫助你判斷哪一種數(shù)據(jù)查詢方法最符合你的目的。
在如下場合下考慮使用DataReader:
1、當(dāng)應(yīng)用程序要求優(yōu)化只讀以及前向數(shù)據(jù)訪問(如綁定DataGrid控件)時,DataReader是一個更好的選項。當(dāng)數(shù)據(jù)從DataReader“卸下”來時,就關(guān)閉連接,這對提供程序的性能有幫助。
2、當(dāng)你打算重復(fù)性的檢索少量數(shù)據(jù)或者你檢索的數(shù)據(jù)在每次使用數(shù)據(jù)時它們都需要盡可能的更新時,最好使用DataReader。
在如下場合下考慮使用DataSet:
1、如果應(yīng)用程序不是立即“卸載”查詢結(jié)果時,或者有大量的處理(如兩次數(shù)據(jù)訪問之間的事務(wù)邏輯處理)時,最好使用DataSet 。DataSet檢索數(shù)據(jù)后,將檢索結(jié)果存放到內(nèi)存中去,并同時把連接返回到數(shù)據(jù)庫連接池中,這樣DataReader可以在處理完成之前
2、持連接鎖定在開啟的狀態(tài)。這個特性會非常容易的導(dǎo)致高流量的應(yīng)用程序耗盡所有可用的數(shù)據(jù)庫連接。
3、當(dāng)你需要多次操作數(shù)據(jù)時,最好使用DataSet。例如,當(dāng)多個控件需要獲取同樣的數(shù)據(jù)時,使用DataSet就比DataReader更加合適。這是因為后者只能讀一次,這樣一個DataReader只能對應(yīng)一個控件,每個控件就要求進(jìn)行一次數(shù)據(jù)檢索。
4、當(dāng)數(shù)據(jù)的變化不是很頻繁(即不要求每次使用數(shù)據(jù)時都從數(shù)據(jù)庫從新檢索它以保證它獲得及時的更新)時,最好使用DataSet。DataSet可以保存在一個會話(Session)或者程序變量中,它也可以用System.Web.Caching.Cache類進(jìn)行緩沖,這樣由于降低了從數(shù)據(jù)庫直接檢索數(shù)據(jù)的次數(shù),應(yīng)用程序的性能會有所提高。
5、當(dāng)建立返回檢索數(shù)據(jù)的Web服務(wù)時,最好使用DataSet 。由于DataSet是可串行化的,因此它可以作為返回值。而DataReader由于需要連續(xù)的數(shù)據(jù)庫連接,因此它不能作為Web服務(wù)的返回值。
牢記這兩個數(shù)據(jù)查詢類——這一點很重要。這兩種方法所針對的目標(biāo)截然不同。
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點擊舉報。