2012-08-07 195 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