我經(jīng)常聽(tīng)到有人問(wèn)這個(gè)問(wèn)題:“在ASP.NET Web應(yīng)用程序中我應(yīng)該用DataReader類(lèi)還是DataSet類(lèi)呢?”在很多文章以及新聞組的貼子中 " /> 久久综合九色综合欧美狠狠,日本大片在线观看,中文字幕一区二区三区四区五区

中文字幕日韩一区二区_国产一区二区av_国产毛片av_久久久久国产一区_色婷婷电影_国产一区二区精品

用DataReader還是DataSet?

ADO.NET提供了兩個(gè)主要的類(lèi)來(lái)讀取數(shù)據(jù)。通過(guò)本文我們可以學(xué)習(xí)如何在兩者之間進(jìn)行選擇。 

我經(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)樗鼈兌际俏覀兯枰摹C總€(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)的方面得到一些指南。在基于客戶端的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查詢,或者一個(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)大的許多功能只適用于基于客戶端的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查詢(如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ù)。

 你需要存儲(chǔ)數(shù)據(jù),而后續(xù)的頁(yè)面請(qǐng)求可能會(huì)用到的這些數(shù)據(jù)。如果數(shù)據(jù)只被請(qǐng)求它的專(zhuān)門(mén)的人使用,你可以將DataSet類(lèi)保存在一個(gè)Session變量中。如果數(shù)據(jù)可以被任何人訪問(wèn),那么你可以將它保存在一個(gè)Application變量中,或保存在Cache中(我建議使用后一種方法,因?yàn)樗С謺r(shí)間期限和回調(diào)(callback))。因?yàn)镈ataReader類(lèi)必須一直打開(kāi)對(duì)數(shù)據(jù)庫(kù)的連接,而且它一次只能保存一行數(shù)據(jù),所以它們不能在跨頁(yè)面請(qǐng)求中被保存。

 你需要對(duì)一個(gè)結(jié)果集的每個(gè)元素實(shí)現(xiàn)特殊的、耗時(shí)的功能。例如,如果你從一個(gè)數(shù)據(jù)庫(kù)讀取一列郵政編碼,并想通過(guò)調(diào)用一個(gè)Web service來(lái)得到每個(gè)地區(qū)的詳細(xì)的天氣狀況信息,那么選擇DataSet就會(huì)更好。這是因?yàn)椋?dāng)你在用DataReader類(lèi)時(shí),在關(guān)閉DataReader類(lèi)前,與數(shù)據(jù)庫(kù)的連接不會(huì)被釋放回連接池。在數(shù)千頁(yè)面請(qǐng)求之間潛在的一個(gè)很小的延時(shí)都會(huì)造成Web應(yīng)用程序的很高的訪問(wèn)量,從而就會(huì)消耗完可用的連接。相反,DataSet可以在前端讀取所有的數(shù)據(jù),并可以馬上關(guān)閉與數(shù)據(jù)庫(kù)的連接,將它返回到連接池,因此其它的頁(yè)面請(qǐng)求就可以用這個(gè)連接了。

 你需要在一個(gè)兩維范例中加載并處理XML數(shù)據(jù)。DataSet類(lèi)對(duì)于XML很有用,因?yàn)槟憧梢詫ataView用于XML,對(duì)根本的數(shù)據(jù)進(jìn)行排序和篩選,就同處理一個(gè)數(shù)據(jù)庫(kù)結(jié)果集一樣。然而,需要注意的是在System.Xml名字空間中有很多類(lèi),你可以將它們用于更復(fù)雜的XML操作。

 你的數(shù)據(jù)源不是一個(gè)數(shù)據(jù)庫(kù)。雖然OleDbDataReader可以用于任何OLEDB數(shù)據(jù)提供者(可能指向一個(gè)數(shù)據(jù)庫(kù),也可能不指向一個(gè)數(shù)據(jù)庫(kù)),但DataSet對(duì)象可以從一個(gè)XML文件直接加載數(shù)據(jù),并動(dòng)態(tài)地解釋它的schema。DataSet類(lèi)也可以將XML數(shù)據(jù)寫(xiě)回一個(gè)數(shù)據(jù)流或一個(gè)文件。



從上面的講述我們就可以看到,DataSet類(lèi)比DataReader類(lèi)有更多的功能,這就可以讓你在更多的情況下運(yùn)用它們。但這并不意味著你總是在用DataSet類(lèi)。你需要在ASP.NET中完成的相當(dāng)大一部分的任務(wù)都屬于DataReader的范疇。

盡管如此,毫無(wú)疑問(wèn),從重要程度或復(fù)雜程度的角度來(lái)說(shuō),DataSet類(lèi)在很多ASP.NET Web應(yīng)用程序中都起著很重要的作用。你可以通過(guò)明智的緩存來(lái)最小化數(shù)據(jù)庫(kù)往返,從而降低DataSet類(lèi)的“性能損害”。DataReader和DataSet都是一個(gè)成功的ASP.NET Web應(yīng)用程序的重要的部件。重要的是,我們需要了解何時(shí)、在哪里可以最好的使用它們。

AspNet技術(shù)用DataReader還是DataSet?,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 精品成人av | 黄色毛片在线看 | 真人女人一级毛片免费播放 | 中国一级特黄毛片大片 | 久久久99精品免费观看 | 一区二区视频在线观看 | 久久精品美女 | 午夜网站视频 | 亚洲免费三级 | 国产成人综合一区二区三区 | 欧美三级视频在线观看 | 欧美日韩精品一区二区三区四区 | 国产在线观看免费 | av先锋资源 | 日韩av看片 | 日韩精品视频一区二区三区 | 殴美成人在线视频 | 精品国产精品国产偷麻豆 | 国产一区久久精品 | 日韩精品无码一区二区三区 | 久久精品国产一区二区三区不卡 | 国产丝袜一区二区三区免费视频 | 夜夜艹 | 中文字幕第十五页 | 在线播放亚洲 | 国产日韩欧美一区二区 | 国产精品成人在线播放 | 男女激情网站免费 | 日本不卡一区二区 | 狠狠干av| 亚洲精品一二三区 | 亚洲精品无 | 国产第一区二区 | 国际精品鲁一鲁一区二区小说 | 国产日韩欧美在线观看 | 国产成在线观看免费视频 | 日韩欧美国产一区二区三区 | 五月婷婷婷 | 日日干日日操 | 在线免费观看欧美 | 中国黄色在线视频 |