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 つのテーブル間のリレーションシップを作成する DataRelation を DataSet に追加すると、 ForeignKeyConstraint と UniqueConstraint の両方が自動的に作成されます。 UniqueConstraint が親 DataTable 内の主キー列に適用され、この制約が親テーブルの ConstraintCollection に追加されます。 ForeignKeyConstraint が主キー列と外部キー列に適用され、この制約が子テーブルの ConstraintCollection に追加されます。
ConstraintCollection は、 Add 、 Clear 、 Remove など、標準のコレクションのメソッドを使用します。この他、 Contains メソッドを使用して、特定の制約がコレクションに含まれるかどうかを確認できます。
Unique プロパティが true に設定されている DataColumn を DataTable オブジェクトの DataColumnCollection に追加すると、 UniqueConstraint が作成されます。
DataRelation を DataSet オブジェクトの DataRelationCollection に追加すると、 ForeignKeyConstraint が作成されます。
使用例
[Visual Basic, C#, C++] DataTable を作成し、 DataColumn (Unique プロパティが true に設定されている) を DataColumnCollection に追加する方法を最初の例に示します。 DataSet を 1 つ、 DataTable オブジェクトを 2 つ、列を 4 つ、 DataRelation を 1 つ作成する方法を 2 番目の例に示します。 DataRelation を DataSet オブジェクトの DataRelationCollection に追加したときに ForeignKeyConstraint と UniqueConstraint が作成されたことを示す制約数が出力されます。
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