DataRead 和DataSet區別

来源:http://www.cnblogs.com/shigezhuang/archive/2017/10/09/7641817.html
-Advertisement-
Play Games

DataRead 和DataSet區別 dataset表示一個數據集,是數據在記憶體中的緩存。 可以包括多個表DatSet 連接資料庫時是非面向連接的。把表全部讀到Sql中的緩衝池,並斷開於資料庫的連接 datareader 連接資料庫時是面向連接的。讀表時,只能向前讀取,讀完數據後有用戶決定是否斷開 ...


DataRead 和DataSet區別

dataset表示一個數據集,是數據在記憶體中的緩存。 可以包括多個表
DatSet 連接資料庫時是非面向連接的。把表全部讀到Sql中的緩衝池,並斷開於資料庫的連接

datareader 連接資料庫時是面向連接的。讀表時,只能向前讀取,讀完數據後有用戶決定是否斷開連接。

分散式系統的數據可能會用dataset做數據載體,因為dataset是保存數據的數據結構,而DataReader不承擔保存數據的責任,它只負責從數據源讀取數據到本地而已,它不是數據結構,而是網路通訊組件的高層封裝。 DataAdapter也只是使用DataReader從數據源讀取數據並Add到dataset保存起來而已。假如我們單獨使用DataReader也可以把數據寫入到業務類或者dataset里。那隻是根據業務需要而選擇不同的數據載體而已。實際上我們從資料庫獲得數據都會通過DataReader,只不過DataAdapter把這一切都封裝起來了

dataset 和 datareader對象有什麼區別?
DataSet可以離線處理,前後滾動.DataReader不能離線處理,且是只讀的向前的,不過速度明顯會很快 DataSet可以存儲資料庫各種對象的,比如表觸發器等,而DataReader只能存儲游標記錄  
DataSet可以更新回原來的資料庫,DataReader不行;   
DataSet可以FORWORD     PREVIUS,而DataReader只能FW;   
DataReader類似一個只能向前的游標記錄集   
DataSet叫數據集!是ADO.net相對與ADO實現斷開式資料庫連接性的主要體現!DateReader是一個客戶端的只向前游標,兩者的應用領域不同!讀取數據後!如果要進行比較頻繁的改動,可以使用DataSet,並且DataSet也支持串列化,可與xslt結合!進行web開發!   
DataReader則偏向於快速讀取數據!針對數據量比較大的數據可能應用的更加頻繁點! <[三]>ADO.NET提供以下兩個對象,用於檢索關係數據並將其存儲在記憶體中:DataSet和DataReader。DataSet提供一個記憶體中數據的關係表示形式,一整套包括一些表在內的數據(這些表包含數據、對數據進行排序並約束數據),以及表之間的關係。DataReader提供一個來自資料庫的快速、僅向前、只讀數據流。

當使用DataSet時,經常會利用DataAdapter(也可能是CommandBuilder)與數據源進行交互。當使用DataSet時,也可以利用DataView對DataSet中的數據應用排序和篩選。也可以從DataSet繼承,創建強類型DataSet,用於將表、行和列作為強類型對象屬性公開。

下列主題包括的信息涉及:使用DataSet或DataReader的最佳時機、如何優化訪問它們所包含數據、以及如何優化使用DataAdapter(包括CommandBuilder)和DataView的技巧。

 

DataSet與DataReader

當設計應用程式時,要考慮應用程式所需功能的等級,以確定使用DataSet或者是DataReader。

要通過應用程式執行以下操作,就要使用DataSet:

r 在結果的多個離散表之間進行導航。

r 操作來自多個數據源(例如,來自多個資料庫、一個XML文件和一個電子錶格的混合數據)的數據。

r 在各層之間交換數據或使用XML Web服務。與DataReader不同的是,DataSet能傳遞給遠程客戶端。

r 重用同樣的記錄集合,以便通過緩存獲得性能改善(例如排序、搜索或篩選數據)。

r 每條記錄都需要執行大量處理。對使用DataReader返回的每一行進行擴展處理會延長服務於DataReader的連接的必要時間,這影響了性能。

r 使用XML操作對數據進行操作,例如可擴展樣式表語言轉換(XSLT轉換)或XPath查詢。

 

對於下列情況,要在應用程式中使用DataReader:

r 不需要緩存數據。

r 要處理的結果集太大,記憶體中放不下。

r 一旦需要以僅向前、只讀方式快速訪問數據。

註填充DataSet時,DataAdapter使用DataReader。因此,使用DataAdapter取代DataSet提升的性能表現為節省了DataSet占用記憶體和填充DataSet需要的迴圈。一般來說,此性能提升只是象徵性的,因此,設計決策應以所需功能為基礎。<[四]>


經常聽到有人問這個問題:“在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應用程式的重要的部件。重要的是,我們需要瞭解何時、在哪裡可以最好的使用它們。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • [1]顯示 [2]文件 [3]關機 [4]登錄 [5]shell [6]VIM ...
  • Tomcat 概述: Tomcat是Apache 軟體基金會(Apache Software Foundation)的Jakarta 項目中的一個核心項目,由Apache、Sun 和其他一些公司及個人共同開發而成。由於有了Sun 的參與和支持,最新的Servlet 和JSP 規範總是能在Tomcat ...
  • 在講vim編輯器之前,我們要先明白為什麼要學vim編輯器。系統管理員的重要工作就是要修改與設定某些重要軟體的配置文件,因此至少要學會一種以上的文字介面的文書編輯器。 現在開始正式學習vim編輯器。基本上vim共分為三種模式,分別是一般模式,編輯模式,與指令列模式,這三種模式的作用分別是: 1)一般模 ...
  • 首先解釋下:本文只是對Asp.net MVC4高級編程這本書學習記錄的學習筆記,書本內容感覺挺簡單的,但學習容易忘記,因此在邊看的同時邊作下了筆記,可能其它朋友看的話沒有情境和邏輯順序還請諒解! 一、MVC控制器渲染視圖的三種方式。 如下以HomeController控制器中的代碼為例: 1、預設方 ...
  • 局部函數是C 7中的一個新功能,允許在一個函數中定義另一個函數。 何時使用局部函數? 局部函數的主要功能與匿名方法非常相似:在某些情況下,創建一個命名函數在讀者的認知負擔方面代價太大。有時,函數本身就是另一個函數的部分邏輯,因此用一個單獨的命名實體來污染“外部”範圍是毫無意義的。 您可能認為此功能是 ...
  • 在數值字元串的格式化中有很多格式化的格式,比如:用"C"表示貨幣格式,用"P"表示百分比格式,FCL中支持多種格式化字元串的方式。有時候我們會把一個數值轉換成string類型,然後再從string類型轉換成數值類型,這時候就要考慮轉換回來後的數值會不會和原來的相等呢? 首先的一種情況: 使用G常規格 ...
  • 基於ffmpeg和虹軟人臉識別庫的C#開源實現,對虹軟人臉識別庫進行了包裝,便於在C#中快速、安全的調用識別函數。同時,開源代碼中,包含完整的實現示例。 ...
  • 本篇作為技術分享系列的第四篇,詳細講一下手繪視頻中 Surface Pen 和 Surface Dial 的使用場景。 先放一張微軟官方商城的圖,Surface 的使用中結合了 Surface Pen 和 Surface Dial。 Surface Pen 的使用場景不難想象,就像 iPad 和 A ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...