3

DataTableC#でクラスター化されたキーをオンにすることはできますか?

私のコードには、3つの列の可能な組み合わせが一意であるための制約があるという要件があります.....

4

2 に答える 2

6

必要なのは、実際にはの固有の制約ですDataTableクラスタ化されたキーはSQLServerのディスク上の機能であり、には適用されませんDataTable

DataTableの制約に関するMSDNドキュメントを確認してください。

単一の列またはDataTable内の列の配列のいずれかに割り当てることができる、UniqueConstraintオブジェクトは、指定された1つまたは複数の列のすべてのデータが行ごとに一意であることを保証します。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;

解決策2

一部の列の値の組み合わせに一意の値を設定する場合は、これを試すことができます。

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 に答える