九九热这里直有精品,1区二区三区在线播放,玖玖爱在线观看资源,国产aⅴ综合网,午夜福利男女,日本亚洲欧美三级,日韩无码黄色导航,内射少妇13区,中文字幕高清网

您身邊的軟件定制專業(yè)公司--10年開(kāi)發(fā)經(jīng)驗(yàn)為您護(hù)航

18678812288
0531-88887250

深入理解DataAdapter

文章作者:濟(jì)南軟件開(kāi)發(fā) 時(shí)間:2016年12月20日

摘要

       ADO.NET有兩個(gè)核心組件:基于連接的Data Provider組件以及基于非連接的DataSet組件。基于連接的Data Provider組件常用于實(shí)時(shí)地從數(shù)據(jù)庫(kù)中檢索數(shù)據(jù)。而基于非連接的DataSet,似乎與數(shù)據(jù)庫(kù)沒(méi)有直接聯(lián)系,僅僅用于在本地內(nèi)存中存儲(chǔ)Data Provider提供的數(shù)據(jù)表或集合。這一切似乎很微妙,此時(shí),你是否在想:這兩大組件是如何聯(lián)系在一起的呢?或許,通過(guò)閱讀本文會(huì)或多或少解除你的一些疑惑呢!

1. 認(rèn)識(shí)DataAdapter

      前面我所講的對(duì)象中,譬如Connection對(duì)象,Command對(duì)象以及DataReader對(duì)象,這些對(duì)象均屬于Data Provider的一部分,而且都是基于連接的。擁有強(qiáng)大功能的它們,讓你可以很輕松地連接一個(gè)特定的數(shù)據(jù)源,執(zhí)行SQL語(yǔ)句,檢索只讀的數(shù)據(jù)流等等。這些基于連接的對(duì)象都對(duì)應(yīng)于特定的數(shù)據(jù)源。換句話說(shuō),對(duì)于不同的數(shù)據(jù)源,我們需要找到對(duì)應(yīng)的數(shù)據(jù)庫(kù)提供程序(Data Provider)來(lái)匹配他們。當(dāng)然,你也不必為此感到困惑和緊張,在前面我已經(jīng)講得很詳細(xì)了?;蛟S,以目前我們所學(xué)的知識(shí),對(duì)于操作數(shù)據(jù)源以及檢索數(shù)據(jù)完全沒(méi)有什么問(wèn)題呢!但是,這并沒(méi)有發(fā)揮出ADO.NET的優(yōu)勢(shì)。如果,每次我們檢索數(shù)據(jù)庫(kù)中的表或者行都需要連接一次數(shù)據(jù)庫(kù),那么性能和效率是十分低下的。實(shí)際上,ADO.NET提供了基于非連接的核心組件:DataSet。DataSet組件讓我們可以很愉快地在內(nèi)存中操作以表為中心的數(shù)據(jù)集合,就好比操作數(shù)據(jù)庫(kù)中的表一樣。這是多么讓人興奮和激動(dòng)??!

      不知道大家有沒(méi)有想過(guò)這樣一個(gè)問(wèn)題(反正我是想了):既然DataSet是基于非連接的(不需要連接數(shù)據(jù)庫(kù)),那么它存儲(chǔ)的數(shù)據(jù)集合是從哪里來(lái)呢?實(shí)際上,很多時(shí)候,它的數(shù)據(jù)還是來(lái)自于數(shù)據(jù)庫(kù)。Oh!這似乎有點(diǎn)自相矛盾了!打個(gè)“不雅”的比喻:就好比沒(méi)有雞,那哪來(lái)的蛋呢?你不妨換個(gè)角度來(lái)思考問(wèn)題!雖然,你沒(méi)有養(yǎng)雞,但是,你不是還可以從超市或者其他零售店買到雞蛋嗎?同理,盡管DataSet沒(méi)有直接連接數(shù)據(jù)庫(kù),但是,ADO.NET早就為DataSet準(zhǔn)備了一位非常謙虛友善的中介:DataApdater。DataApater數(shù)據(jù)適配器,就是這樣一個(gè)對(duì)象:它為外部數(shù)據(jù)源與本地DataSet集合架起了一座堅(jiān)實(shí)的橋梁,將從外部數(shù)據(jù)源檢索到的數(shù)據(jù)合理正確的調(diào)配到本地的DataSet集合中。

2. DataAdapter的工作原理

      要說(shuō)DataAdapter是ADO.NET世界里最為復(fù)雜的部分,其實(shí)也不為過(guò)!但是,我們也不必驚慌。盡管DataAdater內(nèi)部實(shí)現(xiàn)機(jī)制較為復(fù)雜,但是提供開(kāi)發(fā)人員的接口卻是異常的簡(jiǎn)單。我們知道,DataApapter本質(zhì)上就是一個(gè)數(shù)據(jù)調(diào)配器。當(dāng)我們需要查詢數(shù)據(jù)時(shí),它從數(shù)據(jù)庫(kù)檢索數(shù)據(jù),并填充要本地的DataSet或者DataTable中;當(dāng)我需要更新數(shù)據(jù)庫(kù)時(shí),它將本地內(nèi)存的數(shù)據(jù)路由到數(shù)據(jù)庫(kù),并執(zhí)行更新命令。下面我們以Customer表為例,來(lái)理解DataAdapter的工作原理。

      我們可以知道,當(dāng)我查詢Customer信息,DataAdapter首先將構(gòu)造一個(gè)SelectCommand實(shí)例(本質(zhì)就一個(gè)Command對(duì)象),然后檢查是否打開(kāi)連接,如果沒(méi)有打開(kāi)連接則打開(kāi)連接,緊接著調(diào)用DataReader接口檢索數(shù)據(jù),最后根據(jù)維護(hù)的映射關(guān)系,將檢索到得數(shù)據(jù)庫(kù)填充到本地的DataSet或者DataTable中。同理,我們需要更新數(shù)據(jù)源時(shí),DataAdatper則將本地修改的數(shù)據(jù),跟據(jù)映射關(guān)系,構(gòu)造InsertCommand,UpdateCommnad,DeleteCommand對(duì)象,然后執(zhí)行相應(yīng)的命令。

     之所以說(shuō),DataAdapter是最復(fù)雜的ADO.NET組件,是因?yàn)樗羌軜?gòu)在所有其他DataProvider對(duì)象之上的。Connection對(duì)象,DataReader對(duì)象,Paramter對(duì)象以及Command對(duì)象,都盡可能的為它服務(wù)??傮w來(lái)說(shuō),DataAdapter主要有三大功能:

數(shù)據(jù)檢索:盡可能用最簡(jiǎn)單的方法填充數(shù)據(jù)源到本地DataSet或者DataTable中。細(xì)致的說(shuō),DataAdapter用一個(gè)DataReader實(shí)例來(lái)檢索數(shù)據(jù),因此你必須提供一個(gè)Select查詢語(yǔ)句以及一個(gè)連接字符串。

數(shù)據(jù)更新:將本地修改的數(shù)據(jù)返回給外部的數(shù)據(jù)源相對(duì)來(lái)說(shuō)稍微復(fù)雜一點(diǎn)。即使,從數(shù)據(jù)庫(kù)查詢數(shù)據(jù)時(shí),我們僅僅只需要一條基本的Select語(yǔ)句,而更新數(shù)據(jù)庫(kù)則需要區(qū)分Insert,Update,Delete語(yǔ)句。

表或列名映射:維護(hù)本地DataSet表名和列名與外部數(shù)據(jù)源表名與列名的映射關(guān)系。

3. 說(shuō)說(shuō)DataAdapter的重要成員

      作為.NET DataProvider對(duì)象成員之一,DataAdapter跟其他數(shù)據(jù)提供對(duì)象具有相似的特征:都是基于連接的,都繼承于基類,不同的數(shù)據(jù)源都對(duì)應(yīng)自己的派生版本。這樣理解的話,學(xué)習(xí)DataAdapter似乎簡(jiǎn)單的多。DataAdapter的基類是DBDataAdapter,它的結(jié)構(gòu)如下:

public abstract class DbDataAdapter : DataAdapter, 

    IDbDataAdapter, IDataAdapter, ICloneable

      從上面我們可以看到,DBDataAdapter是一個(gè)抽象基類,不能被實(shí)例化,并且繼承DataAdapter類,IDBDataApdater,IdataAdapter以及Icloneable接口。DataAdapter成員較多,必須掌握的有以下幾種:

 

SelectComand屬性:獲取或設(shè)置用于在數(shù)據(jù)源選擇記錄的命令。

UpdateCommand屬性:獲取或這只用于更新數(shù)據(jù)源中的記錄的命令。

DeleteCommand屬性:獲取或設(shè)置用于從數(shù)據(jù)源中刪除記錄的命令。

InsertCommand屬性:獲取或設(shè)置用于將新記錄插入數(shù)據(jù)源中的命令。

Fill方法:填充數(shù)據(jù)集。

Update方法:更新數(shù)據(jù)源。

4. 總結(jié)

       本文我主要從"WHY"與"WHAT"的角度詳細(xì)講解了DataAdapter的工作原理以及主要作用。如果文章對(duì)園友們有幫助,希望能得到您的推薦和關(guān)注。您的肯定和支持是我繼續(xù)寫作的最大動(dòng)力!


想要了解更多詳情歡迎來(lái)電咨詢18678812288
登陸網(wǎng)址:m.h6244.cn。
聯(lián)系人:王經(jīng)理。

沧源| 资阳市| 仁布县| 南江县| 吴川市| 灯塔市| 且末县| 永丰县| 青铜峡市| 惠东县| 景泰县| 宿迁市| 靖边县| 和田市| 武安市| 德庆县| 云阳县| 卫辉市| 蒙自县| 钦州市| 绥化市| 治多县| 望城县| 漳平市| 古浪县| 临邑县| 个旧市| 富阳市| 锦屏县| 文水县| 梓潼县| 冕宁县| 外汇| 永兴县| 那坡县| 华容县| 陵川县| 营山县| 汾阳市| 赣榆县| 贡觉县|