DataRelation 对象执行两种功能:
-
它可使与正使用的记录相关的记录可用。如果在父记录 (GetChildRows) 中,则它提供子记录;如果正使用子记录 (GetParentRow),则它提供父记录。
- 它可强制约束的引用完整性,如删除父记录时删除相关的子记录。
以下代码为此两种功能的演示:
代码输出结果:
通过子行来显示数据
Name:张三 OrderDate:2010-8-7 19:53:20Name:张三 OrderDate:2010-8-6 19:53:20
Name:李四 OrderDate:2010-8-8 19:53:20
通过父行来显示数据
OrderDate:2010-8-7 19:53:20 CustomerName:张三
OrderDate:2010-8-8 19:53:20 CustomerName:李四
OrderDate:2010-8-6 19:53:20 CustomerName:张三
<NewDataSet>
<order>
<CustomerID>3</CustomerID>
<OrderDate>2010-08-07T19:53:20.65625+08:00</OrderDate>
</order>
<order>
<CustomerID>4</CustomerID>
<OrderDate>2010-08-08T19:53:20.65625+08:00</OrderDate>
</order>
<order>
<CustomerID>3</CustomerID>
<OrderDate>2010-08-06T19:53:20.65625+08:00</OrderDate>
</order>
</NewDataSet>删除customer表中的张三后
<NewDataSet>
<order>
<CustomerID>4</CustomerID>
<OrderDate>2010-08-08T19:53:20.65625+08:00</OrderDate>
</order>
</NewDataSet>
此外它还有唯一约束的功能,它保证父表中的列不包含重复内容,也这也是为什么GetParentRow而不是GetParentRows了,如果把这段代码插入到CreateCustomerTb()方法中
则会报“System.ArgumentException : 这些列当前不具有唯一值“的异常
再来看:外键约束,可用来维护数据集中的父表和子表之间的引用完整性。
比如这时把CreateOrderTb方法中的row3["CustomerID"] = 3; 改为row3["CustomerID"] = 5,程序报如下异常:
“System.ArgumentException : 不能启用此约束,因为不是所有的值都具有相应的父值”