DataRelation 的使用——Datagrid的关联表用到的

有许多时候应用程序需要使用相关表。尽管数据集与数据库中一样也包含表和列,但它本身并不具有数据库的相关表能力。然而,可以创建 DataRelation 对象,基于公共键建立父(主)表和子(详细资料)表之间的关系。

例如,包含销售数据的数据集可能有 Customers 表和 Orders 表。即使这些表包含公共键(在本例中可能是 CustomerID),但数据集本身并不跟踪一个表中与另一个表中的记录相关的记录。但可以创建引用父表和子表(及它们的键)的 DataRelation 对象,然后通过该对象来使用相关表。

DataRelation 对象可执行两种功能:

它可使与正使用的记录相关的记录可用。如果在父记录中,它提供子记录;如果正使用子记录,它提供父记录。
它可强制约束的引用完整性,如删除父记录时删除相关的子记录。
了解真正的联接与 DataRelation 对象功能之间的差异很重要。在真正的联接中,从父表和子表获取记录并将其放入单个的平面记录集。当使用 DataRelation 对象时,不创建新记录集。而关系跟踪表之间的关系并使父记录和子记录保持同步。

访问相关记录
如果数据集中的表有逻辑关系,则 DataRelation 对象可使另一个表中的相关记录供您使用。包含具有 Customers 表(主键为 CustomerID)和 Orders 表(外键为 CustomerID)的客户数据库的数据集即属于此例。可以创建 DataRelation 对象,并将其属性设置为反映这些键。

然后可以使用 DataRelation 对象获取相关记录。此过程是间接的,因为并未联接表,而是调用父表中数据行的 GetChildRows 方法,给它传递定义父/子关系的 DataRelation 对象。该方法返回相关子记录的数组。

下列代码阐释一个获取相关记录的简单示例。本例中,drarray 数组设置为 Customers 表中第一行的子记录。

' Visual Basic
Dim RowCtr As Integer
' Dim an array of datarows to hold the child records.
Dim drarray() As DataRow
' GetChildRows gets related rows. It is a method on the datatable, and
' takes a DataRelation name as a string.
RowCtr = 0
drarray = dsCustomersOrders1.Customers(RowCtr).GetChildRows("CustomersOrders")

// C#
int rowCtr;
// Declare an array of datarows to hold the child records.
DataRow[] drarray;
// GetChildRows gets related rows. It is a method on the datatable, and
// takes either DataRelation object name as a string.
rowCtr = 0;
drarray = dsCustomersOrders1.Customers[rowCtr].GetChildRows("CustomersOrders");
同样,可以通过调用子表中数据行的 GetParentRow 方法获取给定子记录的父行。这种情况下,该方法不返回数组,而是返回单个数据行。有关更多信息,请参见导航表间关系。

DataRelation 对象和约束
DataRelation 对象也用于创键和强制下列约束:

唯一约束,它保证表中的列不包含重复内容。
外键约束,可用来维护数据集中的父表和子表之间的引用完整性。
在 DataRelation 对象中指定的约束通过自动创建适当的对象或设置属性来实现。如果使用 DataRelation 对象创建外键约束,则 ForeignKeyConstraint 类的实例被添加到数据关系的 ChildKeyConstraint 属性。

唯一约束则通过简单地将数据列的 Unique 属性设置为 ture,或者通过将 UniqueConstraint 类的实例添加到 DataRelation 对象的 ParentKeyConstraint 来实现。

作为外键约束的一部分,可以指定在三个时候应用的引用完整性规则:

更新父记录时
删除父记录时
接受或拒绝更改时
可以创建的规则在 Rule 枚举中指定,并在下表中列出。

外键约束规则 操作
Cascade 对父记录所做的更改(更新或删除)同样适用于子表中的相关记录。
SetNull 不删除子记录,但子记录中的外键设置为 DBNull。使用该设置后,子记录可以作为“孤行”保留,即子记录与父记录没有关系。
注意   使用此规则会导致子表中的无效数据。
 
SetDefault 相关子记录中的外键设置为默认值(由列的 DefaultValue 属性建立)。
None 不更改相关子记录。使用该设置后,子记录会以包含对无效父记录的引用结束。
Default 默认值为 Cascade。

 

纯约束关系
创建 DataRelation 对象时,有一个指定关系只用于强制约束(即关系不能也用于访问相关记录)的选项。该选项允许生成效率稍高而且包含的方法比具有相关记录功能的数据集少的数据集。但是,将不能访问相关记录。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值