深入理解DataAdapter(一)

2021-06-23 02:22:37 字數 2587 閱讀 4675

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

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

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

要說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主要有三大功能:

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

public

abstract

class dbdataadapter : dataadapter,

idbdataadapter, idataadapter, icloneable

從上面我們可以看到,dbdataadapter是乙個抽象基類,不能被例項化,並且繼承dataadapter類,idbdataapdater,idataadapter以及icloneable介面。dataadapter成員較多,必須掌握的有以下幾種:

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

深入理解C語言 深入理解指標

關於指標,其是c語言的重點,c語言學的好壞,其實就是指標學的好壞。其實指標並不複雜,學習指標,要正確的理解指標。指標也是一種變數,占有記憶體空間,用來儲存記憶體位址 指標就是告訴編譯器,開闢4個位元組的儲存空間 32位系統 無論是幾級指標都是一樣的 p操作記憶體 在指標宣告時,號表示所宣告的變數為指...

mysql 索引深入理解 深入理解MySql的索引

為什麼索引能提高查詢速度 先從 mysql的基本儲存結構說起 mysql的基本儲存結構是頁 記錄都存在頁裡邊 各個資料頁可以組成乙個雙向鍊錶每個資料頁中的記錄又可以組成乙個單向鍊錶 每個資料頁都會為儲存在它裡邊兒的記錄生成乙個頁目錄,在通過主鍵查詢某條記錄的時候可以在頁目錄中使用二分法快速定位到對應...

深入理解C語言 深入理解指標

關於指標,其是c語言的重點,c語言學的好壞,其實就是指標學的好壞。其實指標並不複雜,學習指標,要正確的理解指標。指標也是一種變數,占有記憶體空間,用來儲存記憶體位址 指標就是告訴編譯器,開闢4個位元組的儲存空間 32位系統 無論是幾級指標都是一樣的 p操作記憶體 在指標宣告時,號表示所宣告的變數為指...