次の方法で共有


DataTable クラス

インメモリ データのテーブル 1 つを表します。

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

System.Object
   System.ComponentModel.MarshalByValueComponent
      System.Data.DataTable

<Serializable>
Public Class DataTable   Inherits MarshalByValueComponent   Implements IListSource, ISupportInitialize, ISerializable
[C#]
[Serializable]
public class DataTable : MarshalByValueComponent, IListSource,   ISupportInitialize, ISerializable
[C++]
[Serializable]
public __gc class DataTable : public MarshalByValueComponent,   IListSource, ISupportInitialize, ISerializable
[JScript]
public
   Serializable
class DataTable extends MarshalByValueComponent implements   IListSource, ISupportInitialize, ISerializable

スレッドセーフ

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

解説

DataTable は ADO.NET ライブラリ内の中心的オブジェクトです。 DataTable を使用するその他のオブジェクトとしては、 DataSetDataView があります。

DataTable オブジェクトにアクセスするときは、条件付きで大文字と小文字が区別されることに注意してください。たとえば、"mydatatable" という名前の DataTable と "Mydatatable" という名前のテーブルがある場合は、この 2 つのーブルのどちらかを検索する文字列は大文字と小文字を区別すると見なされます。ただし、"mydatatable" という名前は存在するが "Mydatatable" という名前が存在しない場合は、検索文字列は大文字と小文字を区別しないと見なされます。 DataTable オブジェクトの使用の詳細については、「 DataTable の作成 」を参照してください。

プログラムによって DataTable を作成する場合は、最初に DataColumn オブジェクトを (Columns プロパティを使用してアクセスする) DataColumnCollection に追加してテーブルのスキーマを定義する必要があります。 DataColumn オブジェクトの追加の詳細については、「 テーブルへの列の追加 」を参照してください。

DataTable に行を追加するには、最初に NewRow メソッドを使用して新しい DataRow オブジェクトを返す必要があります。スキーマはテーブルの DataColumnCollection によって定義されているため、 NewRow メソッドは DataTable のスキーマを使用して行を返します。 DataTable が格納できる最大行数は 16,777,216 行です。詳細については、「 テーブルへのデータの追加 」を参照してください。

テーブルのスキーマは、 DataColumn オブジェクトのコレクションである DataColumnCollection によって定義されます。 DataColumnCollection にアクセスするには、 Columns プロパティを使用します。テーブルのスキーマの定義の詳細については、 DataColumn DataColumnCollection の各トピックを参照してください。

DataTable には、データの整合性の保持に使用できる Constraint オブジェクトのコレクションが格納されます。詳細については、「 テーブルへの制約の追加 」を参照してください。

テーブルがいつ変更されるかを確認するには、 RowChangedRowChangingRowDeleting 、または RowDeleted のいずれかのイベントを使用します。詳細については、「 DataTable イベントの使用 」を参照してください。

DataTable のインスタンスを作成すると、一部の読み書き可能プロパティが初期値に設定されます。これらの初期値の一覧については、 DataTable コンストラクタのトピックを参照してください。

メモ    DataSet オブジェクトと DataTable オブジェクトは MarshalByValueComponent から継承し、リモート処理用の ISerializable インターフェイスをサポートします。リモート処理できる ADO.NET オブジェクトはこれらのオブジェクトだけです。

使用例

[Visual Basic, C#, C++] 2 つの DataTable オブジェクトと 1 つの DataRelation オブジェクトを作成し、新しいオブジェクトを DataSet に追加する例を次に示します。次に、 DataGrid.SetDataBinding メソッドを呼び出して、 DataGrid コントロールにテーブルを表示します。

 
' Put the next line into the Declarations section.
 private myDataSet As DataSet 
 
 Private Sub MakeDataTables()
    ' Run all of the functions. 
    MakeParentTable()
    MakeChildTable()
    MakeDataRelation()
    BindToDataGrid()
 End Sub
 
 Private Sub MakeParentTable()
    ' Create a new DataTable.
    Dim myDataTable As DataTable = new DataTable("ParentTable")
    ' Declare variables for DataColumn and DataRow objects.
    Dim myDataColumn As DataColumn 
    Dim myDataRow As DataRow 
 
    ' Create new DataColumn, set DataType, ColumnName and add to DataTable.    
    myDataColumn = New DataColumn()
    myDataColumn.DataType = System.Type.GetType("System.Int32")
    myDataColumn.ColumnName = "id"
    myDataColumn.ReadOnly = True
    myDataColumn.Unique = True
    ' Add the Column to the DataColumnCollection.
    myDataTable.Columns.Add(myDataColumn)
 
    ' Create second column.
    myDataColumn = New DataColumn()
    myDataColumn.DataType = System.Type.GetType("System.String")
    myDataColumn.ColumnName = "ParentItem"
    myDataColumn.AutoIncrement = False
    myDataColumn.Caption = "ParentItem"
    myDataColumn.ReadOnly = False
    myDataColumn.Unique = False
    ' Add the column to the table.
    myDataTable.Columns.Add(myDataColumn)
 
    ' Make the ID column the primary key column.
    Dim PrimaryKeyColumns(0) As DataColumn
    PrimaryKeyColumns(0)= myDataTable.Columns("id")
    myDataTable.PrimaryKey = PrimaryKeyColumns
 
    ' Instantiate the DataSet variable.
    myDataSet = New DataSet()
    ' Add the new DataTable to the DataSet.
    myDataSet.Tables.Add(myDataTable)
 
    ' Create three new DataRow objects and add them to the DataTable
    Dim i As Integer
    For i = 0 to 2
       myDataRow = myDataTable.NewRow()
       myDataRow("id") = i
       myDataRow("ParentItem") = "ParentItem " + i.ToString()
       myDataTable.Rows.Add(myDataRow)
    Next i
 End Sub
 
 Private Sub MakeChildTable()
    ' Create a new DataTable.
    Dim myDataTable As DataTable = New DataTable("childTable")
    Dim myDataColumn As DataColumn 
    Dim myDataRow As DataRow 
 
    ' Create first column and add to the DataTable.
    myDataColumn = New DataColumn()
    myDataColumn.DataType= System.Type.GetType("System.Int32")
    myDataColumn.ColumnName = "ChildID"
    myDataColumn.AutoIncrement = True
    myDataColumn.Caption = "ID"
    myDataColumn.ReadOnly = True
    myDataColumn.Unique = True
    ' Add the column to the DataColumnCollection.
    myDataTable.Columns.Add(myDataColumn)
 
    ' Create second column.
    myDataColumn = New DataColumn()
    myDataColumn.DataType= System.Type.GetType("System.String")
    myDataColumn.ColumnName = "ChildItem"
    myDataColumn.AutoIncrement = False
    myDataColumn.Caption = "ChildItem"
    myDataColumn.ReadOnly = False
    myDataColumn.Unique = False
    myDataTable.Columns.Add(myDataColumn)
 
    ' Create third column.
    myDataColumn = New DataColumn()
    myDataColumn.DataType= System.Type.GetType("System.Int32")
    myDataColumn.ColumnName = "ParentID"
    myDataColumn.AutoIncrement = False
    myDataColumn.Caption = "ParentID"
    myDataColumn.ReadOnly = False
    myDataColumn.Unique = False
    myDataTable.Columns.Add(myDataColumn)
 
    myDataSet.Tables.Add(myDataTable)
    ' Create three sets of DataRow objects, five rows each, and add to DataTable.
    Dim i As Integer
    For i = 0 to 4
       myDataRow = myDataTable.NewRow()
       myDataRow("childID") = i
       myDataRow("ChildItem") = "Item " + i.ToString()
       myDataRow("ParentID") = 0 
       myDataTable.Rows.Add(myDataRow)
    Next i
    For i = 0 to 4
       myDataRow = myDataTable.NewRow()
       myDataRow("childID") = i + 5
       myDataRow("ChildItem") = "Item " + i.ToString()
       myDataRow("ParentID") = 1 
       myDataTable.Rows.Add(myDataRow)
    Next i
    For i = 0 to 4
       myDataRow = myDataTable.NewRow()
       myDataRow("childID") = i + 10
       myDataRow("ChildItem") = "Item " + i.ToString()
       myDataRow("ParentID") = 2 
       myDataTable.Rows.Add(myDataRow)
    Next i
 End Sub
 
 Private Sub MakeDataRelation()
    ' DataRelation requires two DataColumn (parent and child) and a name.
    Dim myDataRelation As DataRelation 
    Dim parentColumn As DataColumn 
    Dim childColumn As DataColumn 
    parentColumn = myDataSet.Tables("ParentTable").Columns("id")
    childColumn = myDataSet.Tables("ChildTable").Columns("ParentID")
    myDataRelation = new DataRelation("parent2Child", parentColumn, childColumn)
    myDataSet.Tables("ChildTable").ParentRelations.Add(myDataRelation)
 End Sub
 
 Private Sub BindToDataGrid()
    ' Instruct the DataGrid to bind to the DataSet, with the 
    ' ParentTable as the topmost DataTable.
    DataGrid1.SetDataBinding(myDataSet,"ParentTable")
 End Sub
 

[C#] 
// Put the next line into the Declarations section.
 private System.Data.DataSet myDataSet;
 
 private void MakeDataTables(){
    // Run all of the functions. 
    MakeParentTable();
    MakeChildTable();
    MakeDataRelation();
    BindToDataGrid();
 }
 
 private void MakeParentTable(){
    // Create a new DataTable.
    System.Data.DataTable myDataTable = new DataTable("ParentTable");
    // Declare variables for DataColumn and DataRow objects.
    DataColumn myDataColumn;
    DataRow myDataRow;
 
    // Create new DataColumn, set DataType, ColumnName and add to DataTable.    
    myDataColumn = new DataColumn();
    myDataColumn.DataType = System.Type.GetType("System.Int32");
    myDataColumn.ColumnName = "id";
    myDataColumn.ReadOnly = true;
    myDataColumn.Unique = true;
    // Add the Column to the DataColumnCollection.
    myDataTable.Columns.Add(myDataColumn);
 
    // Create second column.
    myDataColumn = new DataColumn();
    myDataColumn.DataType = System.Type.GetType("System.String");
    myDataColumn.ColumnName = "ParentItem";
    myDataColumn.AutoIncrement = false;
    myDataColumn.Caption = "ParentItem";
    myDataColumn.ReadOnly = false;
    myDataColumn.Unique = false;
    // Add the column to the table.
    myDataTable.Columns.Add(myDataColumn);
 
    // Make the ID column the primary key column.
    DataColumn[] PrimaryKeyColumns = new DataColumn[1];
    PrimaryKeyColumns[0] = myDataTable.Columns["id"];
    myDataTable.PrimaryKey = PrimaryKeyColumns;
 
    // Instantiate the DataSet variable.
    myDataSet = new DataSet();
    // Add the new DataTable to the DataSet.
    myDataSet.Tables.Add(myDataTable);
 
    // Create three new DataRow objects and add them to the DataTable
    for (int i = 0; i<= 2; i++){
       myDataRow = myDataTable.NewRow();
       myDataRow["id"] = i;
       myDataRow["ParentItem"] = "ParentItem " + i;
       myDataTable.Rows.Add(myDataRow);
    }
 }
 
 private void MakeChildTable(){
    // Create a new DataTable.
    DataTable myDataTable = new DataTable("childTable");
    DataColumn myDataColumn;
    DataRow myDataRow;
 
    // Create first column and add to the DataTable.
    myDataColumn = new DataColumn();
    myDataColumn.DataType= System.Type.GetType("System.Int32");
    myDataColumn.ColumnName = "ChildID";
    myDataColumn.AutoIncrement = true;
    myDataColumn.Caption = "ID";
    myDataColumn.ReadOnly = true;
    myDataColumn.Unique = true;
    // Add the column to the DataColumnCollection.
    myDataTable.Columns.Add(myDataColumn);
 
    // Create second column.
    myDataColumn = new DataColumn();
    myDataColumn.DataType= System.Type.GetType("System.String");
    myDataColumn.ColumnName = "ChildItem";
    myDataColumn.AutoIncrement = false;
    myDataColumn.Caption = "ChildItem";
    myDataColumn.ReadOnly = false;
    myDataColumn.Unique = false;
    myDataTable.Columns.Add(myDataColumn);
 
    // Create third column.
    myDataColumn = new DataColumn();
    myDataColumn.DataType= System.Type.GetType("System.Int32");
    myDataColumn.ColumnName = "ParentID";
    myDataColumn.AutoIncrement = false;
    myDataColumn.Caption = "ParentID";
    myDataColumn.ReadOnly = false;
    myDataColumn.Unique = false;
    myDataTable.Columns.Add(myDataColumn);
 
    myDataSet.Tables.Add(myDataTable);
    // Create three sets of DataRow objects, five rows each, and add to DataTable.
    for(int i = 0; i <= 4; i ++){
       myDataRow = myDataTable.NewRow();
       myDataRow["childID"] = i;
       myDataRow["ChildItem"] = "Item " + i;
       myDataRow["ParentID"] = 0 ;
       myDataTable.Rows.Add(myDataRow);
    }
    for(int i = 0; i <= 4; i ++){
       myDataRow = myDataTable.NewRow();
       myDataRow["childID"] = i + 5;
       myDataRow["ChildItem"] = "Item " + i;
       myDataRow["ParentID"] = 1 ;
       myDataTable.Rows.Add(myDataRow);
    }
    for(int i = 0; i <= 4; i ++){
       myDataRow = myDataTable.NewRow();
       myDataRow["childID"] = i + 10;
       myDataRow["ChildItem"] = "Item " + i;
       myDataRow["ParentID"] = 2 ;
       myDataTable.Rows.Add(myDataRow);
    }
 }
 
 private void MakeDataRelation(){
    // DataRelation requires two DataColumn (parent and child) and a name.
    DataRelation myDataRelation;
    DataColumn parentColumn;
    DataColumn childColumn;
    parentColumn = myDataSet.Tables["ParentTable"].Columns["id"];
    childColumn = myDataSet.Tables["ChildTable"].Columns["ParentID"];
    myDataRelation = new DataRelation("parent2Child", parentColumn, childColumn);
    myDataSet.Tables["ChildTable"].ParentRelations.Add(myDataRelation);
 }
 
 private void BindToDataGrid(){
    // Instruct the DataGrid to bind to the DataSet, with the 
    // ParentTable as the topmost DataTable.
    dataGrid1.SetDataBinding(myDataSet,"ParentTable");
 }

[C++] 
// Put the next line into the Declarations section.
private:
 System::Data::DataSet* myDataSet;
 
 void MakeDataTables(){
    // Run all of the functions. 
    MakeParentTable();
    MakeChildTable();
    MakeDataRelation();
    BindToDataGrid();
 }
 
 void MakeParentTable(){
    // Create a new DataTable.
    System::Data::DataTable* myDataTable = new DataTable(S"ParentTable");
    // Declare variables for DataColumn and DataRow objects.
    DataColumn* myDataColumn;
    DataRow* myDataRow;
 
    // Create new DataColumn, set DataType, ColumnName and add to DataTable.    
    myDataColumn = new DataColumn();
    myDataColumn->DataType = System::Type::GetType(S"System.Int32");
    myDataColumn->ColumnName = S"id";
    myDataColumn->ReadOnly = true;
    myDataColumn->Unique = true;
    // Add the Column to the DataColumnCollection.
    myDataTable->Columns->Add(myDataColumn);
 
    // Create second column.
    myDataColumn = new DataColumn();
    myDataColumn->DataType = System::Type::GetType(S"System.String");
    myDataColumn->ColumnName = S"ParentItem";
    myDataColumn->AutoIncrement = false;
    myDataColumn->Caption = S"ParentItem";
    myDataColumn->ReadOnly = false;
    myDataColumn->Unique = false;
    // Add the column to the table.
    myDataTable->Columns->Add(myDataColumn);
 
    // Make the ID column the primary key column.
    DataColumn* PrimaryKeyColumns[] = new DataColumn*[1];
    PrimaryKeyColumns->Item[0] = myDataTable->Columns->Item[S"id"];
    myDataTable->PrimaryKey = PrimaryKeyColumns;
 
    // Instantiate the DataSet variable.
    myDataSet = new DataSet();
    // Add the new DataTable to the DataSet.
    myDataSet->Tables->Add(myDataTable);
 
    // Create three new DataRow objects and add them to the DataTable
    for (int i = 0; i<= 2; i++){
       myDataRow = myDataTable->NewRow();
       myDataRow->Item[S"id"] = __box(i);
       myDataRow->Item[S"ParentItem"] = String::Format( S"ParentItem {0}", __box(i));
       myDataTable->Rows->Add(myDataRow);
    }
 }
 
 void MakeChildTable(){
    // Create a new DataTable.
    DataTable* myDataTable = new DataTable(S"childTable");
    DataColumn* myDataColumn;
    DataRow* myDataRow;
 
    // Create first column and add to the DataTable.
    myDataColumn = new DataColumn();
    myDataColumn->DataType= System::Type::GetType(S"System.Int32");
    myDataColumn->ColumnName = S"ChildID";
    myDataColumn->AutoIncrement = true;
    myDataColumn->Caption = S"ID";
    myDataColumn->ReadOnly = true;
    myDataColumn->Unique = true;
    // Add the column to the DataColumnCollection.
    myDataTable->Columns->Add(myDataColumn);
 
    // Create second column.
    myDataColumn = new DataColumn();
    myDataColumn->DataType= System::Type::GetType(S"System.String");
    myDataColumn->ColumnName = S"ChildItem";
    myDataColumn->AutoIncrement = false;
    myDataColumn->Caption = S"ChildItem";
    myDataColumn->ReadOnly = false;
    myDataColumn->Unique = false;
    myDataTable->Columns->Add(myDataColumn);
 
    // Create third column.
    myDataColumn = new DataColumn();
    myDataColumn->DataType= System::Type::GetType(S"System.Int32");
    myDataColumn->ColumnName = S"ParentID";
    myDataColumn->AutoIncrement = false;
    myDataColumn->Caption = S"ParentID";
    myDataColumn->ReadOnly = false;
    myDataColumn->Unique = false;
    myDataTable->Columns->Add(myDataColumn);
 
    myDataSet->Tables->Add(myDataTable);
    // Create three sets of DataRow objects, five rows each, and add to DataTable.
    for(int i = 0; i <= 4; i ++){
       myDataRow = myDataTable->NewRow();
       myDataRow->Item[S"childID"] = __box(i);
       myDataRow->Item[S"ChildItem"] = String::Format( S"Item {0}", __box(i));
       myDataRow->Item[S"ParentID"] = __box(0);
       myDataTable->Rows->Add(myDataRow);
    }
    for(int i = 0; i <= 4; i ++){
       myDataRow = myDataTable->NewRow();
       myDataRow->Item[S"childID"] = __box(i + 5);
       myDataRow->Item[S"ChildItem"] = String::Format( S"Item {0}", __box(i));
       myDataRow->Item[S"ParentID"] = __box(1);
       myDataTable->Rows->Add(myDataRow);
    }
    for(int i = 0; i <= 4; i ++){
       myDataRow = myDataTable->NewRow();
       myDataRow->Item[S"childID"] = __box(i + 10);
       myDataRow->Item[S"ChildItem"] = String::Format( S"Item {0}", __box(i));
       myDataRow->Item[S"ParentID"] = __box(2);
       myDataTable->Rows->Add(myDataRow);
    }
 }
 
 void MakeDataRelation(){
    // DataRelation requires two DataColumn (parent and child) and a name.
    DataRelation* myDataRelation;
    DataColumn* parentColumn;
    DataColumn* childColumn;
    parentColumn = myDataSet->Tables->Item[S"ParentTable"]->Columns->Item[S"id"];
    childColumn = myDataSet->Tables->Item[S"ChildTable"]->Columns->Item[S"ParentID"];
    myDataRelation = new DataRelation(S"parent2Child", parentColumn, childColumn);
    myDataSet->Tables->Item[S"ChildTable"]->ParentRelations->Add(myDataRelation);
 }
 
 void BindToDataGrid(){
    // Instruct the DataGrid to bind to the DataSet, with the 
    // ParentTable as the topmost DataTable.
    dataGrid1->SetDataBinding(myDataSet,S"ParentTable");
 }

[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 内)

参照

DataTable メンバ | System.Data 名前空間 | DataColumnCollection | DataColumn | DataRow | DataSet | DataView | DataRowCollection