2012-08-07 152 views

回答

5

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

退房MSDN doc on DataTable constraints

的的UniqueConstraint对象,该对象可以被分配给单个列或列的数据表中的一个阵列,可以确保在指定的列中的所有数据或列是唯一的每行。您可以使用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); 

这应该为你做的伎俩!

+0

嘿'感谢。它非常适合我..... – nirav 2012-08-07 11:57:10

+0

如果我已经有一个填充的DataTable并且想要将重复的行提取到另一个数据表中,那么所有重复的数据以及它们的行号都基于一组唯一的密钥? – 2016-12-22 11:27:11

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数据强制唯一性

+0

是的但我想要3列的值的唯一性。 – nirav 2012-08-07 10:18:43

+0

你的意思是3列中的值的组合必须是唯一的,而不是仅在一列中的值? – yogi 2012-08-07 10:19:34

+0

可以在同一列中复制一个值,但对于任何行,来自3列的值的组合应该是唯一的。 所以我绝对不能把唯一键放在任何一列上。 – nirav 2012-08-07 10:21:08