來(lái)源:北大青鳥(niǎo)飛迅校區(qū)|發(fā)布時(shí)間:2013-05-02 10:39:24
我經(jīng)常聽(tīng)到有人問(wèn)這個(gè)問(wèn)題:“在ASP.NET Web應(yīng)用程序中我應(yīng)該用DataReader類(lèi)還是DataSet類(lèi)呢?”在很多文章以及新聞組的貼子中我經(jīng)?吹竭@樣的誤解,即認(rèn)為DataReader(SqlDataReader或OleDbDataReader的縮寫(xiě))比DataSet好。有時(shí)候我也會(huì)看到相反的說(shuō)法。事實(shí)上,Microsoft創(chuàng)建了這兩個(gè)數(shù)據(jù)存取類(lèi)是因?yàn)樗鼈兌际俏覀兯枰。每個(gè)類(lèi)都有其優(yōu)點(diǎn)和不足,你可以根據(jù)應(yīng)用環(huán)境來(lái)選擇用哪一個(gè)。
本文就兩者的選擇問(wèn)題做了很清楚的講述,可以讓你在運(yùn)用ASP.NET時(shí),在選擇DataReader類(lèi)或DataSet類(lèi)的方面得到一些指南。在基于客戶(hù)端的Windows Form應(yīng)用程序環(huán)境下,這些規(guī)則可能會(huì)改變。我在做這些講述時(shí),假設(shè)你已經(jīng)用過(guò)DataReader和DataSet類(lèi)了,并對(duì)它們很熟悉。
運(yùn)用DataReader類(lèi)
下面就是運(yùn)用DataReader類(lèi)的理想條件: 你讀取的數(shù)據(jù)必須是新的,所以在每次需要數(shù)據(jù)的時(shí)候,你都必須從數(shù)據(jù)庫(kù)讀取。創(chuàng)建一個(gè)DataReader類(lèi)不會(huì)消耗很多內(nèi)存,不過(guò)隨著負(fù)荷的增加,DataSet上的性能也會(huì)很快地提高(參考資源中Visual Studio Magazine中的文章)。
你對(duì)每行數(shù)據(jù)的需求很簡(jiǎn)單。該情況的最好的例子就是簡(jiǎn)單地將DataReader綁定到一個(gè)Web控件,如DataGrid或DropDownList。
你只需要從數(shù)據(jù)庫(kù)中以只向前的(forward-only) 、只讀的形式來(lái)存取XML數(shù)據(jù)。在這種情況下,你可以用SQLCommand對(duì)象的ExcecuteXmlReader()方法來(lái)得到一個(gè)XmlReader類(lèi)(相當(dāng)于XML版的DataReader)。這就需要一個(gè)運(yùn)用FOR XML子句的SQL Server查詢(xún),或者一個(gè)包含有效XML的ntext字段。
你計(jì)劃對(duì)數(shù)據(jù)庫(kù)進(jìn)行幾個(gè)重復(fù)的調(diào)用,來(lái)讀取一小塊信息。在這種情況下,我們前面提到過(guò)的性能數(shù)據(jù)會(huì)有更大的提高。
的確,使DataSet類(lèi)更強(qiáng)大的許多功能只適用于基于客戶(hù)端的Windows Form應(yīng)用程序,比如在多個(gè)表之間建立關(guān)系的功能。在很多情況下,DataSet類(lèi)都比DataReader類(lèi)更有優(yōu)勢(shì),而且在有些情況下,你根本就不能用DataReader類(lèi)。
運(yùn)用DataSet類(lèi)
在下面的情況,你應(yīng)該考慮運(yùn)用DataSet類(lèi): 你構(gòu)建了一個(gè)Web service,它運(yùn)用的數(shù)據(jù)是你作為返回值讀取的數(shù)據(jù)。因?yàn)镈ataReader類(lèi)必須保持到數(shù)據(jù)庫(kù)的連接,所以它們不能被序列化到XML中,也不能被發(fā)送給一個(gè)Web service的調(diào)用者。
你需要排序或篩選數(shù)據(jù)。在運(yùn)用一個(gè)DataView對(duì)象(呈現(xiàn)為DataTable類(lèi)的DefaultView屬性,它包含一個(gè)DataSet類(lèi))來(lái)排序或篩選數(shù)據(jù)前,我們先試著用SQL查詢(xún)(如WHERE和ORDER BY語(yǔ)句)來(lái)實(shí)現(xiàn)這些功能,并運(yùn)用更輕量級(jí)、更快的DataReader類(lèi)。然而,有時(shí)侯用這種方法是不行的,或者當(dāng)你需要多次地對(duì)數(shù)據(jù)進(jìn)行排序或篩選時(shí)就不能用DataReader。
針對(duì)同一請(qǐng)求,你需要多次遍歷數(shù)據(jù)。你只能在DataReader中循環(huán)一次。如果你想將多個(gè)ServerControl類(lèi)綁定到同一個(gè)數(shù)據(jù)集,那么選擇DataSet就更好。DataReader類(lèi)不能被綁定到多個(gè)ServerControl類(lèi),因?yàn)樗侵幌蚯白x取的。在這種情況下,如果要使用DataReader,必須從數(shù)據(jù)庫(kù)讀取兩次數(shù)據(jù)。
全程面授,不高薪都難
申請(qǐng)成功后,我們將在24小時(shí)內(nèi)與您聯(lián)系
招生熱線: 4008-0731-86 / 0731-82186801
學(xué)校地址: 長(zhǎng)沙市天心區(qū)團(tuán)結(jié)路6號(hào)
Copyright © 2006 | 湖南大計(jì)信息科技有限公司 版權(quán)所有
湘ICP備14017520號(hào)-3