次の方法で共有


ConstraintCollection クラス

DataTable に対する制約のコレクションを表します。

この型のすべてのメンバの一覧については、ConstraintCollection メンバ を参照してください。

System.Object
   System.Data.InternalDataCollectionBase
      System.Data.ConstraintCollection

<Serializable>
Public Class ConstraintCollection   Inherits InternalDataCollectionBase
[C#]
[Serializable]
public class ConstraintCollection : InternalDataCollectionBase
[C++]
[Serializable]
public __gc class ConstraintCollection : public   InternalDataCollectionBase
[JScript]
public
   Serializable
class ConstraintCollection extends   InternalDataCollectionBase

スレッドセーフ

この型は、マルチスレッド読み取り操作に対して安全です。すべての書き込み操作の同期をとる必要があります。

解説

ConstraintCollection にアクセスするには、 DataTable.Constraints プロパティを使用します。

ConstraintCollection は、 DataTable に対する UniqueConstraint オブジェクトと ForeignKeyConstraint オブジェクトの両方を含むことができます。 UniqueConstraint オブジェクトは、指定した列のデータが常に一意であり、データの整合性が保持されるようにします。 ForeignKeyConstraint は、 DataTable 内のデータが更新または削除された場合に関連テーブル内のそのデータをどのように処理するかを決定します。たとえば、行を削除したとき、関連行も削除する (連鎖) か、その他のアクションを実行するかを ForeignKeyConstraint が決定します。

メモ   2 つのテーブル間のリレーションシップを作成する DataRelationDataSet に追加すると、 ForeignKeyConstraintUniqueConstraint の両方が自動的に作成されます。 UniqueConstraint が親 DataTable 内の主キー列に適用され、この制約が親テーブルの ConstraintCollection に追加されます。 ForeignKeyConstraint が主キー列と外部キー列に適用され、この制約が子テーブルの ConstraintCollection に追加されます。

ConstraintCollection は、 AddClearRemove など、標準のコレクションのメソッドを使用します。この他、 Contains メソッドを使用して、特定の制約がコレクションに含まれるかどうかを確認できます。

Unique プロパティが true に設定されている DataColumnDataTable オブジェクトの DataColumnCollection に追加すると、 UniqueConstraint が作成されます。

DataRelationDataSet オブジェクトの DataRelationCollection に追加すると、 ForeignKeyConstraint が作成されます。

使用例

[Visual Basic, C#, C++] DataTable を作成し、 DataColumn (Unique プロパティが true に設定されている) を DataColumnCollection に追加する方法を最初の例に示します。 DataSet を 1 つ、 DataTable オブジェクトを 2 つ、列を 4 つ、 DataRelation を 1 つ作成する方法を 2 番目の例に示します。 DataRelationDataSet オブジェクトの DataRelationCollection に追加したときに ForeignKeyConstraintUniqueConstraint が作成されたことを示す制約数が出力されます。

 
Private Sub MakeTableWithUniqueConstraint()
    Dim myTable As New DataTable("myTable")
    Dim myColumn As New DataColumn("UniqueColumn")
    myColumn.Unique = True
    myTable.Columns.Add(myColumn)
    ' Print count, name, and type.
    Console.WriteLine("Constraints.Count " _
       + myTable.Constraints.Count.ToString())
    Console.WriteLine(myTable.Constraints(0).ConstraintName)
    Console.WriteLine(myTable.Constraints(0).GetType().ToString())
    ' Add a second unique column.
    myColumn = New DataColumn("UniqueColumn2")
    myColumn.Unique = True
    myTable.Columns.Add(myColumn)
    ' Print info again.
    Console.WriteLine("Constraints.Count " _
       + myTable.Constraints.Count.ToString())
    Console.WriteLine(myTable.Constraints(1).ConstraintName)
    Console.WriteLine(myTable.Constraints(1).GetType().ToString())
End Sub

Private Sub MakeTableWithForeignConstraint()
    ' Create a DataSet.
    Dim myDataSet As New DataSet("myDataSet")
    ' Make two tables.
    Dim tCust As New DataTable("Customers")
    Dim tOrders As New DataTable("Orders")
    ' Create four columns, two for each table.
    Dim cName As New DataColumn("Name")
    Dim cId As New DataColumn("ID")
    Dim cOrderID As New DataColumn("OrderID")
    Dim [cDate] As New DataColumn("OrderDate")
    
    ' Add columns to tables.
    tCust.Columns.Add(cName)
    tCust.Columns.Add(cId)
    tOrders.Columns.Add(cOrderID)
    tOrders.Columns.Add([cDate])
    
    ' Add tables to the DataSet.
    myDataSet.Tables.Add(tCust)
    myDataSet.Tables.Add(tOrders)
    ' Create a DataRelation for two of the columns.
    Dim myRelation As New DataRelation _
       ("CustomersOrders", cId, cOrderID, True)
    myDataSet.Relations.Add(myRelation)
    ' Print TableName, Constraints.Count, ConstraintName and Type.
    Dim t As DataTable
    For Each t In  myDataSet.Tables
        Console.WriteLine(t.TableName)
        Console.WriteLine("Constraints.Count " _
           + t.Constraints.Count.ToString())
        Console.WriteLine("ParentRelations.Count " _
           + t.ParentRelations.Count.ToString())
        Console.WriteLine("ChildRelations.Count " _
           + t.ChildRelations.Count.ToString())
        Dim cstrnt As Constraint
        For Each cstrnt In  t.Constraints
            Console.WriteLine(cstrnt.ConstraintName)
            Console.WriteLine(cstrnt.GetType())
        Next cstrnt
    Next t
End Sub

[C#] 
private void MakeTableWithUniqueConstraint(){
    DataTable myTable = new DataTable("myTable");
    DataColumn myColumn = new DataColumn("UniqueColumn");
    myColumn.Unique=true;
    myTable.Columns.Add(myColumn);
    // Print count, name, and type.
    Console.WriteLine("Constraints.Count " + myTable.Constraints.Count);
    Console.WriteLine(myTable.Constraints[0].ConstraintName);
    Console.WriteLine(myTable.Constraints[0].GetType() );
    // Add a second unique column.
    myColumn = new DataColumn("UniqueColumn2");
    myColumn.Unique=true;
    myTable.Columns.Add(myColumn);
    // Print info again.
    Console.WriteLine("Constraints.Count " + myTable.Constraints.Count);
    Console.WriteLine(myTable.Constraints[1].ConstraintName);
    Console.WriteLine(myTable.Constraints[1].GetType() );
 }
     
 private void MakeTableWithForeignConstraint(){
    // Create a DataSet.
    DataSet myDataSet = new DataSet("myDataSet");
    // Make two tables.
    DataTable tCust= new DataTable("Customers");
    DataTable tOrders = new DataTable("Orders");
    // Create four columns, two for each table.
    DataColumn cName = new DataColumn("Name");
    DataColumn cId = new DataColumn("ID");
    DataColumn cOrderID = new DataColumn("OrderID");
    DataColumn cDate = new DataColumn("OrderDate");
 
    // Add columns to tables.
    tCust.Columns.Add(cName);
    tCust.Columns.Add(cId);
    tOrders.Columns.Add(cOrderID);
    tOrders.Columns.Add(cDate);
 
    // Add tables to the DataSet.
    myDataSet.Tables.Add(tCust);
    myDataSet.Tables.Add(tOrders); 
    // Create a DataRelation for two of the columns.
    DataRelation myRelation = new 
       DataRelation("CustomersOrders",cId,cOrderID,true);
    myDataSet.Relations.Add(myRelation);
    // Print TableName, Constraints.Count, ConstraintName and Type.
    foreach(DataTable t in myDataSet.Tables){
       Console.WriteLine(t.TableName);
       Console.WriteLine("Constraints.Count " + t.Constraints.Count);
       Console.WriteLine("ParentRelations.Count " + t.ParentRelations.Count);
       Console.WriteLine("ChildRelations.Count " + t.ChildRelations.Count);
       foreach(Constraint cstrnt in t.Constraints){
          Console.WriteLine(cstrnt.ConstraintName);
          Console.WriteLine(cstrnt.GetType());
       }
    }
 }

[C++] 
private:
void MakeTableWithUniqueConstraint(){
    DataTable* myTable = new DataTable(S"myTable");
    DataColumn* myColumn = new DataColumn(S"UniqueColumn");
    myColumn->Unique=true;
    myTable->Columns->Add(myColumn);
    // Print count, name, and type.
    Console::WriteLine(S"Constraints->Count {0}", __box(myTable->Constraints->Count));
    Console::WriteLine(myTable->Constraints->Item[0]->ConstraintName);
    Console::WriteLine(myTable->Constraints->Item[0]->GetType() );
    // Add a second unique column.
    myColumn = new DataColumn(S"UniqueColumn2");
    myColumn->Unique=true;
    myTable->Columns->Add(myColumn);
    // Print info again.
    Console::WriteLine(S"Constraints->Count {0}", __box(myTable->Constraints->Count));
    Console::WriteLine(myTable->Constraints->Item[1]->ConstraintName);
    Console::WriteLine(myTable->Constraints->Item[1]->GetType() );
 }
     
private:
 void MakeTableWithForeignConstraint(){
    // Create a DataSet.
    DataSet* myDataSet = new DataSet(S"myDataSet");
    // Make two tables.
    DataTable* tCust= new DataTable(S"Customers");
    DataTable* tOrders = new DataTable(S"Orders");
    // Create four columns, two for each table.
    DataColumn* cName = new DataColumn(S"Name");
    DataColumn* cId = new DataColumn(S"ID");
    DataColumn* cOrderID = new DataColumn(S"OrderID");
    DataColumn* cDate = new DataColumn(S"OrderDate");
 
    // Add columns to tables.
    tCust->Columns->Add(cName);
    tCust->Columns->Add(cId);
    tOrders->Columns->Add(cOrderID);
    tOrders->Columns->Add(cDate);
 
    // Add tables to the DataSet.
    myDataSet->Tables->Add(tCust);
    myDataSet->Tables->Add(tOrders); 
    // Create a DataRelation for two of the columns.
    DataRelation* myRelation = new 
       DataRelation(S"CustomersOrders",cId,cOrderID,true);
    myDataSet->Relations->Add(myRelation);
    // Print TableName, Constraints.Count, ConstraintName and Type.
    System::Collections::IEnumerator* myEnum = myDataSet->Tables->GetEnumerator();
    while (myEnum->MoveNext())
    {
       DataTable* t = __try_cast<DataTable*>(myEnum->Current);
       Console::WriteLine(t->TableName);
       Console::WriteLine(S"Constraints->Count {0}", __box(t->Constraints->Count));
       Console::WriteLine(S"ParentRelations->Count {0}", __box(t->ParentRelations->Count));
       Console::WriteLine(S"ChildRelations->Count {0}", __box(t->ChildRelations->Count));
       System::Collections::IEnumerator* myEnum1 = t->Constraints->GetEnumerator();
       while (myEnum1->MoveNext())
       {
          Constraint* cstrnt = __try_cast<Constraint*>(myEnum1->Current);
          Console::WriteLine(cstrnt->ConstraintName);
          Console::WriteLine(cstrnt->GetType());
       }
    }
 }

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

名前空間: System.Data

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET

アセンブリ: System.Data (System.Data.dll 内)

参照

ConstraintCollection メンバ | System.Data 名前空間 | ForeignKeyConstraint | UniqueConstraint | DataRelation