ADO.NET数据集 - 为来自不同表的列创建唯一约束条件

问题描述:

我正在用Visual Studio 2008中的.NET 3.5编写C#程序。我有一个包含两个DataTables,A和B的DataSet。在表A中是DataColumn Y ,而在表B中是Z列,在两个表中加上更多的列。列Y和Z都设置为唯一,自动增量列。ADO.NET数据集 - 为来自不同表的列创建唯一约束条件

我想Y和Z在它们两个之间也是唯一的。如在表中,如果表A在Y列中已经有一行3,并且我在表B中创建了一个新行,并且它希望在该新行中的Z列中放置3,则它将跳过3并提出在4

我已经试过的东西,看起来像它应该工作:

myDataSet.Tables["A"].Constraints.Add(new UniqueConstraint(new DataColumn[] { myDataSet.Tables["A"].Columns["Y"], myDataSet.Tables["B"].Columns["Z"] })); 
myDataSet.Tables["B"].Constraints.Add(new UniqueConstraint(new DataColumn[] { myDataSet.Tables["A"].Columns["Y"], myDataSet.Tables["B"].Columns["Z"] })); 

但是,我得到的第一行下面的错误,如果我运行应用程序,它获取到代码:

System.Data.InvalidConstraintException未处理
Message =“Can not creat e属于不同表格的列的键。“
源=“System.Data”

,我添加相同的UniqueConstraint到两个表是因为,我真的不知道还有什么地方把它,使其成为活跃的原因。我宁愿不把这些表合并为一个,因为它们除了列Y和Z之外几乎没有任何关系。

有没有人知道有任何方法可以做到这一点? MSDN文档没有提到多个表,看起来没有其他人试过这个。


我已经完成了这个问题。在我的程序中,我已经使用了一些外键检查来跟踪我正在处理的表格。我认为从现在开始可能会更容易一些,但我决定保留现有的技术(在需要的地方扩展它,比如在我的程序的其他组件中放置更详细的身份信息),它是结果表现很好。

我最终做的并不能真正解决我在这里发布的问题。我向希望在这里得到答案的Google员工致歉。

MSDN documentation特别提到一个DataTable:

的的UniqueConstraint对象,可以 被分配给一个单个列 或列在 数据表(重点煤矿)

阵列

我不认为你能够获得DataTable来为你强制执行此操作,你必须手动强制执行此行为。

+0

不知何故,当我读到这一点时就错过了。是的,我可能确实是手动的。奇怪的是,DataSet没有办法为你强制执行此操作,因为我认为它会有点常见。 我可能会创建一个新表,其目的只有一个自动递增列,并将新行从那里反映到我添加的任何表中。 – pgn674 2010-12-11 22:08:44

+0

@ pgn674:你如何在真实的数据库中做到这一点?这并不常见。 – 2010-12-23 00:45:43