亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

用DataReader還是DataSet?

2024-07-10 13:14:01
字體:
來源:轉載
供稿:網友
ADO.NET提供了兩個主要的類來讀取數據。通過本文我們可以學習如何在兩者之間進行選擇。 

我經常聽到有人問這個問題:“在ASP.NET Web應用程序中我應該用DataReader類還是DataSet類呢?”在很多文章以及新聞組的貼子中我經??吹竭@樣的誤解,即認為DataReader(SqlDataReader或OleDbDataReader的縮寫)比DataSet好。有時候我也會看到相反的說法。事實上,Microsoft創建了這兩個數據存取類是因為它們都是我們所需要的。每個類都有其優點和不足,你可以根據應用環境來選擇用哪一個。 

本文就兩者的選擇問題做了很清楚的講述,可以讓你在運用ASP.NET時,在選擇DataReader類或DataSet類的方面得到一些指南。在基于客戶端的Windows Form應用程序環境下,這些規則可能會改變。我在做這些講述時,假設你已經用過DataReader和DataSet類了,并對它們很熟悉。 

運用DataReader類 
下面就是運用DataReader類的理想條件: 你讀取的數據必須是新的,所以在每次需要數據的時候,你都必須從數據庫讀取。創建一個DataReader類不會消耗很多內存,不過隨著負荷的增加,DataSet上的性能也會很快地提高(參考資源中Visual Studio Magazine中的文章)。 

你對每行數據的需求很簡單。該情況的最好的例子就是簡單地將DataReader綁定到一個Web控件,如DataGrid或DropDownList。 

你只需要從數據庫中以只向前的(forward-only) 、只讀的形式來存取XML數據。在這種情況下,你可以用SQLCommand對象的ExcecuteXmlReader()方法來得到一個XmlReader類(相當于XML版的DataReader)。這就需要一個運用FOR XML子句的SQL Server查詢,或者一個包含有效XML的ntext字段。 

你計劃對數據庫進行幾個重復的調用,來讀取一小塊信息。在這種情況下,我們前面提到過的性能數據會有更大的提高。 

的確,使DataSet類更強大的許多功能只適用于基于客戶端的Windows Form應用程序,比如在多個表之間建立關系的功能。在很多情況下,DataSet類都比DataReader類更有優勢,而且在有些情況下,你根本就不能用DataReader類。 



運用DataSet類 
在下面的情況,你應該考慮運用DataSet類: 你構建了一個Web service,它運用的數據是你作為返回值讀取的數據。因為DataReader類必須保持到數據庫的連接,所以它們不能被序列化到XML中,也不能被發送給一個Web service的調用者。 

你需要排序或篩選數據。在運用一個DataView對象(呈現為DataTable類的DefaultView屬性,它包含一個DataSet類)來排序或篩選數據前,我們先試著用SQL查詢(如WHERE和ORDER BY語句)來實現這些功能,并運用更輕量級、更快的DataReader類。然而,有時侯用這種方法是不行的,或者當你需要多次地對數據進行排序或篩選時就不能用DataReader。 

針對同一請求,你需要多次遍歷數據。你只能在DataReader中循環一次。如果你想將多個ServerControl類綁定到同一個數據集,那么選擇DataSet就更好。DataReader類不能被綁定到多個ServerControl類,因為它是只向前讀取的。在這種情況下,如果要使用DataReader,必須從數據庫讀取兩次數據。 

你需要存儲數據,而后續的頁面請求可能會用到的這些數據。如果數據只被請求它的專門的人使用,你可以將DataSet類保存在一個Session變量中。如果數據可以被任何人訪問,那么你可以將它保存在一個Application變量中,或保存在Cache中(我建議使用后一種方法,因為它支持時間期限和回調(callback))。因為DataReader類必須一直打開對數據庫的連接,而且它一次只能保存一行數據,所以它們不能在跨頁面請求中被保存。 

你需要對一個結果集的每個元素實現特殊的、耗時的功能。例如,如果你從一個數據庫讀取一列郵政編碼,并想通過調用一個Web service來得到每個地區的詳細的天氣狀況信息,那么選擇DataSet就會更好。這是因為,當你在用DataReader類時,在關閉DataReader類前,與數據庫的連接不會被釋放回連接池。在數千頁面請求之間潛在的一個很小的延時都會造成Web應用程序的很高的訪問量,從而就會消耗完可用的連接。相反,DataSet可以在前端讀取所有的數據,并可以馬上關閉與數據庫的連接,將它返回到連接池,因此其它的頁面請求就可以用這個連接了。 

你需要在一個兩維范例中加載并處理XML數據。DataSet類對于XML很有用,因為你可以將DataView用于XML,對根本的數據進行排序和篩選,就同處理一個數據庫結果集一樣。然而,需要注意的是在System.Xml名字空間中有很多類,你可以將它們用于更復雜的XML操作。 

你的數據源不是一個數據庫。雖然OleDbDataReader可以用于任何OLEDB數據提供者(可能指向一個數據庫,也可能不指向一個數據庫),但DataSet對象可以從一個XML文件直接加載數據,并動態地解釋它的schema。DataSet類也可以將XML數據寫回一個數據流或一個文件。 



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

盡管如此,毫無疑問,從重要程度或復雜程度的角度來說,DataSet類在很多ASP.NET Web應用程序中都起著很重要的作用。你可以通過明智的緩存來最小化數據庫往返,從而降低DataSet類的“性能損害”。DataReader和DataSet都是一個成功的ASP.NET Web應用程序的重要的部件。重要的是,我們需要了解何時、在哪里可以最好的使用它們。 
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩欧美国产成人| 91亚洲精华国产精华| 亚洲国产中文字幕久久网| 亚洲成人在线视频播放| 九九热精品视频| 国产视频亚洲视频| 日本午夜在线亚洲.国产| 国产精品欧美风情| 性欧美在线看片a免费观看| 欧美最顶级丰满的aⅴ艳星| 欧美激情女人20p| 日韩电影在线观看永久视频免费网站| 不卡毛片在线看| 欧美片一区二区三区| 国产精品福利网| 精品女厕一区二区三区| 国产精品美女午夜av| 中文字幕在线观看亚洲| 国产精品极品在线| 欧美另类老肥妇| 欧美极品第一页| 一区二区三区国产视频| 97在线观看视频| 精品一区电影国产| 91麻豆国产语对白在线观看| 欧美噜噜久久久xxx| 国产精品扒开腿做爽爽爽视频| 亚洲小视频在线观看| 欧美大成色www永久网站婷| 国内精品视频在线| 久久九九有精品国产23| 色天天综合狠狠色| 亚洲人成电影网站色| 亚洲人成电影网站| 日本最新高清不卡中文字幕| 久久激情视频久久| 日韩欧美a级成人黄色| 亚洲91av视频| 尤物九九久久国产精品的特点| 日韩精品视频三区| 欧美国产欧美亚洲国产日韩mv天天看完整| 国产欧美日韩综合精品| 欧美激情视频三区| 国产成人97精品免费看片| 中文字幕欧美日韩精品| xvideos亚洲| 欧美大全免费观看电视剧大泉洋| 亚洲系列中文字幕| 亚洲国产中文字幕在线观看| 国产成人免费91av在线| 国产精品青草久久久久福利99| 美女啪啪无遮挡免费久久网站| 91亚洲国产成人久久精品网站| 国产精品露脸自拍| 中文欧美日本在线资源| 亚洲欧美日韩在线高清直播| 成人精品视频久久久久| 黑人巨大精品欧美一区二区| 日本久久精品视频| 国产剧情日韩欧美| 国产一区视频在线播放| 中文日韩在线视频| 精品国内亚洲在观看18黄| 欧美成人精品影院| 青青草原成人在线视频| 欧美激情视频网址| 日韩精品日韩在线观看| 成人黄色在线免费| 成人观看高清在线观看免费| 国产在线精品成人一区二区三区| 久久伊人精品天天| 欧美国产日韩二区| 欧美一区二区三区……| 亚洲欧洲国产伦综合| 啊v视频在线一区二区三区| 亚洲色图五月天| 久久久伊人日本| 亚洲欧美资源在线| 日韩精品中文字幕在线观看| 国产精品成人国产乱一区| 91精品国产自产在线老师啪| 久久琪琪电影院| 国产精品777| www欧美日韩| 欧美高清视频一区二区| 国产精品久久精品| 疯狂做受xxxx欧美肥白少妇| 国产一区二区黑人欧美xxxx| 久久人人爽人人爽人人片av高清| 欧美成aaa人片免费看| 欧美一级高清免费播放| 国产精品日韩av| 在线精品国产成人综合| 日韩一区二区精品视频| 欧美在线激情视频| 亚洲国产另类久久精品| 欧美日韩国产中文精品字幕自在自线| 欧美国产日韩一区二区在线观看| 国产精品中文字幕在线观看| 国产欧美在线视频| 久久精品中文字幕| 亚洲欧美日韩综合| 亚洲欧洲在线播放| 欧美日韩国产限制| 精品动漫一区二区| 一区二区三区美女xx视频| 秋霞成人午夜鲁丝一区二区三区| 色综合五月天导航| 性色av一区二区三区红粉影视| 久久电影一区二区| 最新国产精品拍自在线播放| 欧美裸体xxxx极品少妇软件| 国产精品久久久久久一区二区| 国产精品27p| 国产精品第一第二| 国产精品免费一区豆花| 国产亚洲激情视频在线| 国产香蕉精品视频一区二区三区| 亚洲va久久久噜噜噜| 亚洲欧美国产精品专区久久| 日韩av在线免费| 亚洲天堂成人在线视频| 欧美激情久久久久久| 韩日欧美一区二区| 欧美精品久久一区二区| 久久天天躁夜夜躁狠狠躁2022| 国内外成人免费激情在线视频网站| 精品久久久视频| 欧美日韩激情视频| 91成品人片a无限观看| 日本精品在线视频| 国产精品久久不能| 欧美成人午夜剧场免费观看| 日韩最新在线视频| 国产精品一区久久久| 美女精品久久久| 爽爽爽爽爽爽爽成人免费观看| 精品亚洲永久免费精品| 日韩在线视频导航| 8090成年在线看片午夜| 国模精品视频一区二区| 色久欧美在线视频观看| 91中文在线观看| 国产一区香蕉久久| 欧美成aaa人片在线观看蜜臀| 亚洲欧美日韩国产中文专区| 亚洲欧美制服综合另类| 久久频这里精品99香蕉| 久久久国产一区| 91免费的视频在线播放| 国产精品自拍偷拍视频| 久久久视频精品| 亚洲最大福利网站| 日本精品视频网站| 欧美精品久久久久| 久久精品国产清自在天天线| 日韩精品高清在线观看| 久久99热精品这里久久精品| 91精品久久久久久综合乱菊| 57pao成人国产永久免费| 一区二区三区无码高清视频| 欧美丝袜美女中出在线| 欧美电影《睫毛膏》| 狠狠色狠色综合曰曰|