ADO.NET入門教程(八) 深入理解DataAdapter(上)

來源:互聯網
上載者:User

標籤:blog   http   io   ar   strong   sp   資料   div   on   

摘要

ADO.NET有兩個核心組件:基於串連的Data Provider組件以及基於非串連的DataSet組件。基於串連的Data Provider組件常用於即時地從資料庫中檢索資料。而基於非串連的DataSet,似乎與資料庫沒有直接聯絡,僅僅用於在本地記憶體中儲存Data Provider提供的資料表或集合。這一切似乎很微妙,此時,你是否在想:這兩大組件是如何聯絡在一起的呢?或許,通過閱讀本文會或多或少解除你的一些疑惑呢!

目錄
  • 認識DataAdapter
  • DataAdapter的工作原理
  • 說說DataAdapter的重要成員
  • 總結
1. 認識DataAdapter

      前面我所講的對象中,譬如Connection對象,Command對象以及DataReader對象,這些對象均屬於Data Provider的一部分,而且都是基於串連的。擁有強大功能的它們,讓你可以很輕鬆地串連一個特定的資料來源,執行SQL語句,檢索唯讀資料流等等。這些基於串連的對象都對應於特定的資料來源。換句話說,對於不同的資料來源,我們需要找到對應的資料庫提供者(Data Provider)來匹配他們。當然,你也不必為此感到困惑和緊張,在前面我已經講得很詳細了。或許,以目前我們所學的知識,對於操作資料源以及檢索資料完全沒有什麼問題呢!但是,這並沒有發揮出ADO.NET的優勢。如果,每次我們檢索資料庫中的表或者行都需要串連一次資料庫,那麼效能和效率是十分低下的。實際上,ADO.NET提供了基於非串連的核心組件:DataSet。DataSet組件讓我們可以很愉快地在記憶體中操作以表為中心的資料集合,就好比操作資料庫中的表一樣。這是多麼讓人興奮和激動啊!

      不知道大家有沒有想過這樣一個問題(反正我是想了):既然DataSet是基於非串連的(不需要串連資料庫),那麼它儲存的資料集合是從哪裡來呢?實際上,很多時候,它的資料還是來自於資料庫。Oh!這似乎有點自相矛盾了!打個“不雅”的比喻:就好比沒有雞,那哪來的蛋呢?你不妨換個角度來思考問題!雖然,你沒有養雞,但是,你不是還可以從超市或者其他零售店買到雞蛋嗎?同理,儘管DataSet沒有直接連接資料庫,但是,ADO.NET早就為DataSet準備了一位非常謙虛友善的中介:DataApdater。DataApater資料配接器,就是這樣一個對象:它為外部資料源與本地DataSet集合架起了一座堅實的橋樑,將從外部資料源檢索到的資料合理正確的調配到本地的DataSet集合中

 

2. DataAdapter的工作原理

      要說DataAdapter是ADO.NET世界裡最為複雜的部分,其實也不為過!但是,我們也不必驚慌。儘管DataAdater內部實現機制較為複雜,但是提供開發人員的介面卻是異常的簡單。我們知道,DataApapter本質上就是一個資料調配器。當我們需要查詢資料時,它從資料庫檢索資料,並填充要本地的DataSet或者DataTable中;當我需要更新資料庫時,它將本地記憶體的資料路由到資料庫,並執行更新命令。下面我們以Customer表為例,來理解DataAdapter的工作原理。詳細描述了一個DataAdapter的工作過程。

 

                                        圖2.1  DataAdapter執行過程圖

      從我們可以清楚的知道,當我查詢Customer資訊,DataAdapter首先將構造一個SelectCommand執行個體(本質就一個Command對象),然後檢查是否開啟串連,如果沒有開啟串連則開啟串連,緊接著調用DataReader介面檢索資料,最後根據維護的映射關係,將檢索到得資料庫填充到本地的DataSet或者DataTable中。同理,我們需要更新資料來源時,DataAdatper則將本地修改的資料,跟據映射關係,構造InsertCommand,UpdateCommnad,DeleteCommand對象,然後執行相應的命令。

      之所以說,DataAdapter是最複雜的ADO.NET組件,是因為它是架構在所有其他DataProvider對象之上的。Connection對象,DataReader對象,Paramter對象以及Command對象,都儘可能的為它服務。總體來說,DataAdapter主要有三大功能:

  • 資料檢索:儘可能用最簡單的方法填充資料來源到本地DataSet或者DataTable中。細緻的說,DataAdapter用一個DataReader執行個體來檢索資料,因此你必須提供一個Select查詢語句以及一個連接字串。
  • 資料更新:將本地修改的資料返回給外部的資料來源相對來說稍微複雜一點。即使,從資料庫查詢資料時,我們僅僅只需要一條基本的Select語句,而更新資料庫則需要區分Insert,Update,Delete語句。
  • 表或列名映射:維護本地DataSet表名和列名與外部資料源表名與列名的映射關係。

 

3. 說說DataAdapter的重要成員

      作為.NET DataProvider對象成員之一,DataAdapter跟其他資料提供對象具有相似的特徵:都是基於串連的,都繼承於基類,不同的資料來源都對應自己的派生版本。這樣理解的話,學習DataAdapter似乎簡單的多。DataAdapter的基類是DBDataAdapter,它的結構如下:

public abstract class DbDataAdapter : DataAdapter, 
IDbDataAdapter, IDataAdapter, ICloneable

      從上面我們可以看到,DBDataAdapter是一個抽象基類,不能被執行個體化,並且繼承DataAdapter類,IDBDataApdater,IdataAdapter以及Icloneable介面。DataAdapter成員較多,必須掌握的有以下幾種:

  • SelectComand屬性:擷取或設定用於在資料來源選擇記錄的命令。
  • UpdateCommand屬性:擷取或這隻用於更新資料來源中的記錄的命令。
  • DeleteCommand屬性:擷取或設定用於從資料來源中刪除記錄的命令。
  • InsertCommand屬性:擷取或設定用於將新記錄插入資料來源中的命令。
  • Fill方法:填充資料集。
  • Update方法:更新資料來源。

 

4. 總結

       本文我主要從"WHY"與"WHAT"的角度詳細講解了DataAdapter的工作原理以及主要作用。後續的文章,我將圍繞"HOW"來詳細分析DataAdapter的實際應用。如果文章對園友們有協助,希望能得到您的推薦關注。您的肯定和支援是我繼續寫作的最大動力!

 

文章轉載於:http://liuhaorain.cnblogs.com 

ADO.NET入門教程(八) 深入理解DataAdapter(上)

聯繫我們

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

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

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.