DataTable上的UNIQUE约束

时间:2012-08-07 10:12:09

标签: c# asp.net datatable constraints

我可以在C#中的DataTable上拥有群集密钥吗?

在我的代码中要求对3列的可能组合进行约束以使其成为唯一的.....

2 个答案:

答案 0 :(得分:5)

您需要的是DataTable上的唯一约束群集密钥是SQL Server磁盘上的功能,不适用于DataTable

结帐MSDN doc on DataTable constraints

  

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);

这应该适合你!

答案 1 :(得分: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中存在的数据以强制执行唯一性