使用DataReader、DataSet、DataAdapter和DataView

來源:互聯網
上載者:User
使用DataReader、DataSet、DataAdapter和DataView


  ADO.NET提供兩個對象用於檢索關係型資料並把它儲存在記憶體中,分別是DataSet和DataReader。DataSet提供記憶體中關係資料的表現--包括表和次序、約束等表間的關係的完整資料集合。DataReader提供快速、只向前、唯讀來自資料庫的資料流。

  使用DataSet時,一般使用DataAdapter(也可能是CommandBuilder)與資料來源互動,用DataView對DataSet中的資料進行排序和過濾。DataSet可以被繼承來建立強化類型的DataSet,用於暴露表、行、列作為強化類型對象屬性。

  下面的內容包含什麼時候使用DataSet或DataReader,以及怎樣最佳化訪問它們所包含的資料,也包括怎樣最佳化DataAdapter和DataView的使用(也包括CommandBuilder)。

  DataSet與DataReader的對比

  在設計應用程式時,決定使用DataSet還是DataReader需要考慮應用程式需要的功能。

  使用DataSet是為了實現應用程式的下述功能:

  l 操作結果中的多個分離的表。

  l 操作來自多個源(例如來自多個資料庫、XML檔案和試算表的混合資料)的資料。

  l 在層之間交換資料或使用XML Web服務。與DataReader 不同,DataSet能被傳遞到遠程用戶端。

  l 通過緩衝重複使用相同的行集合以提高效能(例如排序、搜尋或過濾資料)。

  l 每行執行大量的處理。在使用DataReader返回的行上進行擴充處理將使串連存在的時間比必要的更長,從而降低效率。

  l 使用XML操作(例如XSLT轉換和Xpath查詢)維護資料。

  在應用程式需要以下功能時使用DataReader:

  l 不需要緩衝資料。

  l 正在處理的結果集太大而不能全部放入記憶體中。

  l 需要迅速一次性訪問資料,採用只向前的唯讀方式。

  注意:當填充DataSet的時候,DataAdapter使用DataReader。因此使用DataAdapter代替DataSet獲得的效能是節約了DataSet消耗的記憶體和組裝DataSet所需要的周期。這種效能的提高大部分是有名無實的,因此你應該根據需要的功能為基礎來做設計決定。

  使用強型別DataSet的好處

  使用DataSet的另一個好處是它能被繼承用於建立強型別的DataSet。強型別DataSet的好處包括設計時的檢查和強型別DataSet 的Visual Studio .NET語句填充。當你為DataSet固定了大綱或關係結構時,就能建立強型別DataSet,把行和列作為對象的屬性而不是項的集合。例如,作為暴露顧客表的某一行的列名的代替,你可以暴露Customer對象的 Name屬性。強型別的DataSet衍生自DataSet類,因此不會犧牲DataSet的任何功能,也就是說,強型別的DataSet也可以是遠端,並作為資料繫結控制項(例如DataGrid)的資料來源提供。如果不知道大綱,也能通過使用通常的DataSet獲得好處,但是喪失了強型別DataSet的附加特性。

  在強型別DataSet中處理空值

  使用強型別DataSet時,你能給DataSet 的XML大綱定義語言(XSD)作註解以確保強型別DataSet正確的處理空(Null)的引用。空值(nullValue)注釋使你能用String.Empty這個特定值代替DBNull、保持了Null 參考、或者產生一個異常。選擇其中的哪個依賴於應用程式的內容,預設情況下遇到Null 參考將產生一個異常。

  重新整理DataSet中的資料

  如果你希望使用更新後的值從伺服器重新整理資料集中的值,使用DataAdapter.Fill。如果主鍵定義在資料表上,DataAdapter.Fill基於主鍵匹配新行,並把伺服器的資料改成已存在的行。被重新整理行的RowState設定為Unchanged,即使在重新整理前它被修改過。注意如果給資料表定義了主鍵,DataAdapter.Fill添加新行可能重複主索引值。

  如果希望用伺服器的當前值重新整理一個表,並且保持表中行的改變,你必須首選使用DataAdapter.Fill組合它,填充一個新的資料表,接著將該資料表合并(Merge)進一個資料集,並把preserveChanges值設為true。

  在DataSet中搜尋資料

  在一個資料集中查詢符合特定條件的行時,使用基於索引(index-based)的查看錶將提高效能。給資料表指定主鍵(PrimaryKey)值時,就建立了一個索引。當為資料表建立資料檢視(DataView)時也建立了索引。下面是一些使用基於索引查看的技巧:

  如果查詢是在資料表的主鍵列上進行的,使用DataTable.Rows.Find代替DataTable.Select。

  查詢非主鍵列,可以使用資料檢視來提高多個資料查詢的速度。當給資料檢視添加排序時,將建立搜尋時使用的索引。資料檢視暴露了查詢下層資料表的Find和FindRows方法。

  如果你不是查詢表的排序視圖,也可以通過為資料表建立資料檢視獲得基於索引的查看錶的好處。注意如果你執行資料上的多個查詢這是唯一的好處。如果你只執行單個查詢,需要建立索引的過程將因為使用索引而降低了效能。

  資料檢視(DataView)結構

  當資料檢視建立後,並且當Sort、RowFilter或RowStateFilter或者屬性被修改時,資料檢視為下層資料表中的資料建立索引。當建立資料檢視對象時,使用把Sort、RowFilter和RowStateFilter值作為參數的資料檢視建構函式。結果是建立了一次索引。建立"空"資料檢視,然後設定Sort、RowFilter和RowStateFilter屬性將導致至少兩次建立索引。




相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。