ADO.NET提供了两种方式来创建DataSet中的表之间的关系。一种方式为通过编程方式创建,另一种方式是使用VB.NET提供的工具创建。在DataSet中,两个DataTable之间的关系用DataRelation表示。在此关系中,一个表为父表,另一个表为子表。
每一个DataSet都有一个Relations集合属性。每个DataSet中定义的所有关系类DataRelation都保存在该集合中。由于DataSet可以包含多个表,因此也可以定义多个DataRelation表示这些表之间的关系,如在本章所创建的BorrowBookDA类中就包含了两个DataRelation。DataRelation包含下列属性:
l ChildTable 获取此关系中做为子表的DataTable。
l ChildColumns 获取子表中的列的DataColumn数组。
l ParentTable 获取此关系中做为父表的DataTable。
l ParentColumns返回父表中的列的DataColumn数组。
创建DataRelation的过程包含3步。首先从具有关系的两个表中检索代表主键和外键的列,这些列的数据类型为DataColumn。其次,使用其构造函数创建DataRelation。第三,向DataSet的Relations集合添加新的DataRelation。重载的DataRelation构造函数的语法如下所示:
Overloads Public Sub New(RelationName As String, ParentColumn As DataColumn, ChildColumn As DataColumn)
Overloads Public Sub New(RelationName As String, ParentColumns() As DataColumn, ChildColumns() As DataColumn)
重载的DataRelation构造函数使用父表的主键和子表的外键创建DataRelation。RelationName参数指定DataRelation的惟一的名称。ParentColumns()和ParentColumn参数定义父表的主键域。ChildColumns()和ChildColumn参数定义子表的外键域。
现在,我们为BorrowBookDA创建两个DataRelation,以连接“学生信息表”、 “图书明细表”和“借出信息”。
Public Shared Sub Initialize()
Dim drLoanToStudent As DataRelation
Dim drLoanToBook As DataRelation
Dim drParent As DataColumn
Dim drChild As DataColumn
drParent = DsBorrowBook1.借出信息.借书证号Column
drChild = DsBorrowBook1.学生信息表.借书证号Column
drLoanToStudent = New DataRelation("LoanInfoToStudent", drParent, drChild)
DsBorrowBook1.Relations.Add(drLoanToStudent)
drParent = DsBorrowBook1.借出信息.图书编号Column
drChild = DsBorrowBook1.图书明细表.图书编号Column
drLoanToBook = New DataRelation("LonaInfoToBook", drParent, drChild)
End Sub
在上面的代码中,首先创建了两个变量来保存实例DataRelation时所需的两个列,还创建了两个变量来分别保存到“学生信息表”和“图收明细表”之间的关系DataRelation。然后将代表主键和外键的列保存到刚才声明的DataColumn变量。这里使用类型化DataSet(DsBorrowBook1)从两个DataTable中获取“借书证号Column”列。
其次使用作为主键和外键域的两个DatColumn创建“drLoanToBook”关系。此DataRelation表示学生到借书信息的一对多关系。最后把创建的DataRelation添加到DataSet的Relations集合属性中。注意,由于类型化DataColumn是派生自Sytstem.Data.DataColumn,所以,这里使用了Sytstem.Data.DataColumn类型变量来引用两种不同的类型化DataColumn。