DataAdapter类代表了微软数据访问模型的一个新概念。DataAdapter类在ADO和DAO中并没有真正的对应类,当然,可以认为ADO Command 对象和DAO QueryDef对象与DataAdapter对象多少有一些联系,它们曾被删除过。
DataAdapter对象充当数据库和ADO.NET对象模型中非连接对象之间的桥梁。DataAdapter对象类的Fill方法提供了一种高效机制,用于将查询结果引入DataSet或DataTable中,以便能够脱机处理数据。还可以利用DataAdapter对象向数据库提交存储在DataSet对象中的挂起更改。
ADO.NET DataAdapter类公开了大量属性,这些属性实际上是Command对象。例如,SelectCommand属性包含一个Command对象,该对象表示将用来填充DataSet对象的查询。DataAdapter类还有UpdateCommand,InsertCommand和DeleteCommand等属性,它们分别对应于用来向数据库提交已修改数据行、新建数据行或被删除数据行的Command对象。
这些Command对象提供了更新功能,在ADO和DAO的Recordset对象中,这些更新自动进行。例如,当在ADO中运行一个查询以生成一个Recordset对象时,ADO的游标引擎就会询问数据库中有关此查询的元数据,以确定结果来自哪里。然后ADO会使用该元数据建立更新逻辑,以将Recordset对象中的更改转换为数据库中的更改。
那么ADO.NET的DataAdapter对象为什么拥有单独的UpdateCommand,InsertCommand和DeleteCommand属性呢?这是为了允许开发人员定义自己的更新逻辑。ADO和DAO的更新功能都十分有限,DataAdapter类因为这两种对象模型都将Recordset中的更改转换为对数据库中的表进行直接引用的操作查询。DataAdapter类为了维护数据的安全性和完整性,许多数据库管理员都限制对其数据库中表的访问,因此更改表内容的***途径就是调用存储过程。#t#
ADO和DAO不知道如何使用存储过程提交更改,也没有提供可让开发人员指定自己更新逻辑的机制。ADO.NET DataAdapter则可以。利用DataAdapter对象,可以设置UpdateCommand,InsertCommand以及DeleteCommand属性来调用存储过程,c如前文所述,DataAdapter类会填充DataSet对象中的表,而且能读取缓存的更改并将其提交给数据库。DataAdapter有一些支持属性,可用来跟踪在什么位置发生了什么操作。TableMappings集合就是其中的一个属性,它用于跟踪数据库中的哪个表与DataSet对象中的哪个表相对应。每个表映射都有一个用于映射列的类似属性,称为ColumnMapping集合。