日期:2012-03-18  浏览次数:20453 次

3.DataSet, DataTable, and Recordset

  关于Recordset object.,ADO.NET并没有与其直接相对应的对象.最接近的是DataTable 对象.虽然它们二者几乎具有相同的功能,但它们在各自的框架里发挥着不同的作用.

  Recordset是一个相当大的对象,具备ADO的大多数功能,但在某些方面仍有欠缺. Recordset在一些方面性能优良,如:它具可创造性,它可以离线操作,功能众多,但在一些方面仍需改进,如:基于其固有的COM特性, Recordset很难在网络上连载; Recordset是一个二进制的对象,因此不同平台之间的模块很难共享它;还有就是蛇不能够穿过防火墙.另外,它表现的是记录的单个表.如果该table作为一个或几个JOIN的结果,那么它很难更新原始代码源.当你试图将脱线的recordset与原始代码源统一起来时,数据源必须能够识别SQL.不管如何,你的recordset可以由非SQL 提供程序创建.

  在ADO.NET中,ADO Recordset的所有功能被分拆成几块更简单的对象:其中一个便是DataReader. DataReader模拟了快速,只读,仅向前的只读游标的操作.

  DataTable,表现了数据源,是个简单的对象. 你可以手动构造一个DataTable,或者也可使用DataSet命令自动生成. DataSet对于它所包含的数据知之不多.通过它,你可以在内存中处理数据,或者是其它比如排序,编辑,筛选,创建浏览等工作.

  DataSet对象是一个数据容器类,是实现ADO.NET数据抽取的关键对象. DataSet集合了一个或几个DataTable 对象. DataTable 通过如行,列这样的通用集合,公开自身的内容.当你尝试从数据表读取数据时,你也许正穿过了两个不同的层面: DataTableMapping 和 DataView.

  DataTableMapping 对象包含了数据源中的数据列,以及DataTable object之间的映射关系.

  当填充 DataSet 时,DataSetCommand 对象要使用这个类。它维护数据集中的抽象列和数据源中的物理列之间的链接。

  表的视图通过 DataView 对象实现。它表示 DataTable 的自定义视图,可以绑定到特定控件(如 Windows 窗体和 Web 窗体中的数据网格)中。该对象相当于 SQL CREATE VIEW 语句在内存中的实现。

  DataSet中所有的表,通过一个公共的域,相互之间能产生关联.它们之间的联系是由DataRelation 对象来进行管理.这样说起来挺象ADO的数据形成,但还是有一个最大的不同.

  在DataRelation里,你不需要使用数据形成语言,而且还可以获得非常灵活的组织架构. 通过ADO .NET 导航模型,你可以很容易的从某一张表中的主行移动到它的所有子行里.

  DataRelation object是关于JOIN 语句在内存中的实现,可用于建立数据类型相同的的parent/child关系,. 一旦关系确立,任何破坏这种关系的修改都被禁止. Views和 relations是完成master/detail 架构的两个方法.请记住view仅是加载于记录之上的掩码, 但是relation

  是位于几个列之间的动态链接,在relation下,你无法更改顺序或是设置条件.

  如果你的代码需要1对1的外键关系,而且更改数据,最好不用JOIN命令.如果你需要额外的筛选功能,你可以寻求ADO .NET自定义视图的支持.