2010-09-30 77 views
1

我有一個數據集與幾個表。在我添加到的其中一個表中,如果我在列中具有唯一值,我希望有一個限制,只允許添加一行。如何在C#.NET數據集表列中爲唯一值設置約束?

表:用戶 列:自動識別,組ID,單元ID *等

在MVS2008,我去設計和單元ID唯一屬性設置爲true,但沒有奏效。

我也在硬編碼的地方添加一行到:this.dataset.Users.UnitIDColumn.Unique = true並嘗試了一個try/catch(InvalidConstraintException),但是每當我硬編碼它,我總是會得到一個異常,即使這個值是唯一的或不是

如何限制只添加一個唯一的UnitID行?提前致謝。

回答

0

每MSDN

private void AddConstraint(DataTable table) 
{ 
    UniqueConstraint uniqueConstraint; 
    // Assuming a column named "UniqueColumn" exists, and 
    // its Unique property is true. 
    uniqueConstraint = new UniqueConstraint(
     table.Columns["UniqueColumn"]); 
    table.Constraints.Add(uniqueConstraint); 
} 
+0

謝謝,這似乎工作。然而,如果你把它放在我們添加行的主代碼中,你會得到一個異常,說明約束已經存在。我做了一個簡單的檢查,如果它存在,刪除它,然後再次添加它。 – mastofact 2010-09-30 21:51:01

+0

我認爲約束添加必須發生在表創建級而不是行創建級。沒有看到您的代碼,但我會假設您可以將移動約束添加到行循環 – Roadie57 2010-10-01 13:08:20

+0

每個MSDN您可以添加多個列上的唯一約束 唯一約束 您可以使用UNIQUE約束來確保沒有重複的值輸入不參與主鍵的特定列。儘管UNIQUE約束和PRIMARY KEY約束都強制執行唯一性,但如果要強制實施不是主鍵的列或列組合的唯一性,請使用UNIQUE約束而不是PRIMARY KEY約束。 可以在一個表上定義多個UNIQUE約束,而只能在一個表上定義一個PRIMARY KEY約束。 – Roadie57 2010-10-08 19:15:43

0

我相信你可以通過指定列在DataSet設計主鍵實現這一目標。

我曾嘗試在DataSet設計器中添加一個名爲Test with 2列的DataTable,其中一個稱爲ID,它是主鍵。只需選擇它,右鍵單擊並選擇「設置爲主鍵」
當我嘗試下面的代碼


PharmacyDataSet.TestDataTable table = new PharmacyDataSet.TestDataTable(); 
table.AddTestRow(1, "one"); 
table.AddTestRow(1, "oneagain"); 
我得到了System.Data.ConstraintException {「列'ID'被限制爲唯一的,值'1'已經存在「}

由設計師生成的代碼是


this.Constraints.Add(new global::System.Data.UniqueConstraint("Constraint1", new global::System.Data.DataColumn[] {this.columnID}, true)); 
this.columnID.Unique = true; 

+0

感謝您的回覆。但是,我忘了提及我已經有了一個主鍵集。我有點能夠設置另一個關鍵點,但我不能把它作爲主要因爲有其他表連接到它。 – mastofact 2010-09-30 21:17:50