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 を使用するその他のオブジェクトとしては、 DataSet と DataView があります。
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 オブジェクトのコレクションが格納されます。詳細については、「 テーブルへの制約の追加 」を参照してください。
テーブルがいつ変更されるかを確認するには、 RowChanged 、 RowChanging 、 RowDeleting 、または 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