1

我正在 Visual Studio 2008 中的 .NET 3.5 中用 C# 编写程序。我有一个包含两个 DataTables A 和 B 的 DataSet。表 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="无法从属于不同表的列创建键。"
源="系统.数据"

我在两个表中添加相同的 UniqueConstraint 的原因是,我不太确定在哪里放置它以使其处于活动状态。我宁愿不将这些表合并为一个,因为除了 Y 列和 Z 列之外,它们彼此几乎没有关系。

有谁知道这样做的任何方法?MSDN 文档没有提到多个表,而且看起来没有其他人尝试过这个。


我已经解决了这个问题。在我的程序中,我已经使用了一些外键检查来跟踪我正在处理的表。我原以为从现在开始换一种方式可能会更容易,但我决定保留我目前的技术(在需要的地方稍微扩展一下,例如在我的程序的其他组件中放置更详细的身份信息),它是结果工作得很好。

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

4

1 回答 1

2

MSDN 文档特别提到了一个 DataTable:

UniqueConstraint 对象,可以分配给单个列或DataTable中的列数组(强调我的)

我认为您无法让 DataTable 为您强制执行此操作,您必须手动强制执行该行为。

于 2010-12-11T02:27:27.427 回答