?!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
摘要
ADO.NET有两个核心组ӞZq接的Data Providerlg以及Z非连接的DataSetlg。基于连接的Data Providerlg常用于实时地从数据库中检索数据。而基于非q接的DataSetQ似乎与数据库没有直接联p,仅仅用于在本地内存中存储Data Provider提供的数据表或集合。这一切似乎很微妙Q此Ӟ你是否在惻Iq两大组件是如何联系在一L呢?或许Q通过阅读本文会或多或解除你的一些疑惑呢Q?/p>
1. 认识DataAdapter
前面我所讲的对象中,譬如Connection对象QCommand对象以及DataReader对象Q这些对象均属于Data Provider的一部分Q而且都是Zq接的。拥有强大功能的它们Q让你可以很L地连接一个特定的数据源,执行SQL语句Q检索只ȝ数据等{。这些基于连接的对象都对应于特定的数据源。换句话_对于不同的数据源Q我们需要找到对应的数据库提供程序(Data ProviderQ来匚w他们。当Ӟ你也不必为此感到困惑和紧张,在前面我已经讲得很详l了。或许,以目前我们所学的知识Q对于操作数据源以及索数据完全没有什么问题呢Q但是,qƈ没有发挥出ADO.NET的优ѝ如果,每次我们索数据库中的表或者行都需要连接一ơ数据库Q那么性能和效率是十分低下的。实际上QADO.NET提供了基于非q接的核心组ӞDataSet。DataSetlg让我们可以很愉快地在内存中操作以表ؓ中心的数据集合,好比操作数据库中的表一栗这是多么让人兴奋和Ȁ动啊Q?/p>
不知道大家有没有惌q样一个问题(反正我是想了Q:既然DataSet是基于非q接的(不需要连接数据库Q,那么它存储的数据集合是从哪里来呢Q实际上Q很多时候,它的数据q是来自于数据库。Oh!q似乎有点自相矛盾了Q打个“不雅”的比喻Q就好比没有鸡,那哪来的蛋呢Q你不妨换个角度来思考问题!虽然Q你没有养鸡Q但是,你不是还可以从超市或者其他零售店买到鸡蛋吗?同理Q尽DataSet没有直接q接数据库,但是QADO.NET早就为DataSet准备了一位非常谦虚友善的中介QDataApdater。DataApater数据适配器,是q样一个对象:它ؓ外部数据源与本地DataSet集合架v了一座坚实的桥梁Q将从外部数据源索到的数据合理正的调配到本地的DataSet集合中?/p>
2. DataAdapter的工作原?/strong>
要说DataAdapter是ADO.NET世界里最为复杂的部分Q其实也不ؓq!但是Q我们也不必惊慌。尽DataAdater内部实现机制较ؓ复杂Q但是提供开发h员的接口却是异常的简单。我们知道,DataApapter本质上就是一个数据调配器。当我们需要查询数据时Q它从数据库索数据,q填充要本地的DataSet或者DataTable中;当我需要更新数据库Ӟ它将本地内存的数据\由到数据库,q执行更新命令。下面我们以Customer表ؓ例,来理解DataAdapter的工作原理?/p>
我们可以知道Q当我查询Customer信息QDataAdapter首先构造一个SelectCommand实例Q本质就一个Command对象Q,然后查是否打开q接Q如果没有打开q接则打开q接Q紧接着调用DataReader接口索数据,最后根据维护的映射关系Q将索到得数据库填充到本地的DataSet或者DataTable中。同理,我们需要更新数据源ӞDataAdatper则将本地修改的数据,跟据映射关系Q构造InsertCommandQUpdateCommnadQDeleteCommand对象Q然后执行相应的命o?/p>
之所以说QDataAdapter是最复杂的ADO.NETlgQ是因ؓ它是架构在所有其他DataProvider对象之上的。Connection对象QDataReader对象QParamter对象以及Command对象Q都可能的为它服务。M来说QDataAdapter主要有三大功能:
数据索:可能用最单的Ҏ填充数据源到本地DataSet或者DataTable中。细致的_DataAdapter用一个DataReader实例来检索数据,因此你必L供一个Select查询语句以及一个连接字W串?/p>
数据更新Q将本地修改的数据返回给外部的数据源相对来说E微复杂一炏V即使,从数据库查询数据Ӟ我们仅仅只需要一条基本的Select语句Q而更新数据库则需要区分Insert,Update,Delete语句?/p>
表或列名映射Q维护本地DataSet表名和列名与外部数据源表名与列名的映关pR?/p>
3. 说说DataAdapter的重要成?/strong>
作ؓ.NET DataProvider对象成员之一QDataAdapter跟其他数据提供对象具有相似的特征Q都是基于连接的Q都l承于基c,不同的数据源都对应自qz版本。这L解的话,学习DataAdapterg单的多。DataAdapter的基cLDBDataAdapterQ它的结构如下:
public abstract class DbDataAdapter : DataAdapter,
IDbDataAdapter, IDataAdapter, ICloneable
从上面我们可以看刎ͼDBDataAdapter是一个抽象基c,不能被实例化Qƈ且承DataAdapterc,IDBDataApdater,IdataAdapter以及Icloneable接口。DataAdapter成员较多Q必L握的有以下几U:
SelectComand属性:获取或设|用于在数据源选择记录的命令?/p>
UpdateCommand属性:获取或这只用于更新数据源中的记录的命令?/p>
DeleteCommand属性:获取或设|用于从数据源中删除记录的命令?/p>
InsertCommand属性:获取或设|用于将新记录插入数据源中的命o?/p>
FillҎQ填充数据集?/p>
UpdateҎQ更新数据源?/p>
4. ȝ
本文我主要从"WHY"?quot;WHAT"的角度详l讲解了DataAdapter的工作原理以及主要作用。如果文章对园友们有帮助Q希望能得到您的推荐和关注。您的肯定和支持是我l箋写作的最大动力!