【发布时间】:2010-12-10 22:34:07
【问题描述】:
我正在 Visual Studio 2008 中的 .NET 3.5 中用 C# 编写程序。我有一个包含两个数据表 A 和 B 的数据集。表 A 中是 DataColumn Y,表 B 中是 Z 列,以及更多列两张桌子。 Y 列和 Z 列都设置为唯一的、自动递增的列。
我希望 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="无法从属于不同表的列创建键。"
Source="System.Data"
我将相同的 UniqueConstraint 添加到两个表的原因是,我不太确定在哪里放置它以使其处于活动状态。我宁愿不将这些表合二为一,因为除了 Y 列和 Z 列之外,它们之间几乎没有任何关系。
有没有人知道有什么方法可以做到这一点? MSDN 文档没有提到多个表,而且看起来没有其他人尝试过这个。
我已经解决了这个问题。在我的程序中,我已经使用了一些外键检查来跟踪我正在处理的表。我原以为从现在开始换一种方式可能会更容易,但我决定保留我目前的技术(在需要的地方稍微扩展一下,比如在我的程序的其他组件中放置更详细的身份信息),而且它是结果证明效果很好。
我最终所做的并不能真正解决我在这里发布的问题。我向希望在这里得到答案的 Google 员工道歉。
【问题讨论】:
标签: c# .net dataset unique-constraint