3

我可以DataTable在 C# 中有一个聚集键吗?

我的代码中要求限制 3 列的可能组合是唯一的.....

4

2 回答 2

6

您真正需要的是您的DataTable. 群集键是 SQL Server 的磁盘功能,不适用于DataTable.

查看有关 DataTable 约束的 MSDN 文档

UniqueConstraint 对象可以分配给单个列或 DataTable 中的列数组,以确保指定列中的所有数据每行都是唯一的。您可以使用 UniqueConstraint 构造函数为列或列数组创建唯一约束。

所以尝试这样的事情:

// this is your DataTable
DataTable custTable ;

// create a UniqueConstraint instance and set its columns that should make up
// that uniqueness constraint - in your case, that would be a set of *three*
// columns, obviously! Adapt to your needs!
UniqueConstraint custUnique = 
   new UniqueConstraint(new DataColumn[] { custTable.Columns["CustomerID"], 
                                           custTable.Columns["CompanyName"] });

// add unique constraint to the list of constraints for your DataTable
custTable.Constraints.Add(custUnique);

这应该对你有用!

于 2012-08-07T10:30:21.647 回答
0

要使您的列强制执行 UNIQUE 约束,您可以使用

DataTable dt = new DataTable();
dt.Columns.Add("UniqueColumn");
dt.Columns["UniqueColumn"].Unique = true;

解决方案二

如果您希望某些列中的值组合具有唯一值,您可以试试这个。

DataTable dt = new DataTable();
dt.Columns.Add("UniqueColumn1");
dt.Columns.Add("UniqueColumn2");
dt.Columns.Add("UniqueColumn3");
dt.Columns.Add("NormalColumn");

string 
       value1 = string.Empty, 
       value2 = string.Empty, 
       value3 = string.Empty, 
       value4 = string.Empty;

//Logic to take values in string values variables goes here

DataRow[] founded = dt.Select("UniqueColumn1 = '"+ value1+
                              "' and UniqueColumn2 = '"+value2+
                              "' and UniqueColumn3 = '"+value3+"'");
if (founded.Length > 0)
      // Message to say values already exist.
else
      // Add a new row to your dt.

在此代码中,您检查 DT 中存在的数据以强制执行唯一性

于 2012-08-07T10:17:02.640 回答