Freigeben über


DataTable-Klasse

Stellt eine Tabelle mit im Arbeitsspeicher befindlichen Daten dar.

Namespace: System.Data
Assembly: System.Data (in system.data.dll)

Syntax

'Declaration
<SerializableAttribute> _
Public Class DataTable
    Inherits MarshalByValueComponent
    Implements IListSource, ISupportInitializeNotification, ISupportInitialize, ISerializable, _
    IXmlSerializable
'Usage
Dim instance As DataTable
[SerializableAttribute] 
public class DataTable : MarshalByValueComponent, IListSource, ISupportInitializeNotification, ISupportInitialize, 
    ISerializable, IXmlSerializable
[SerializableAttribute] 
public ref class DataTable : public MarshalByValueComponent, IListSource, ISupportInitializeNotification, ISupportInitialize, 
    ISerializable, IXmlSerializable
/** @attribute SerializableAttribute() */ 
public class DataTable extends MarshalByValueComponent implements IListSource, ISupportInitializeNotification, 
    ISupportInitialize, ISerializable, IXmlSerializable
SerializableAttribute 
public class DataTable extends MarshalByValueComponent implements IListSource, ISupportInitializeNotification, 
    ISupportInitialize, ISerializable, IXmlSerializable

Hinweise

DataTable ist ein zentrales Objekt in der ADO.NET-Bibliothek. Zu den weiteren Objekten, die DataTable verwenden, zählen DataSet und DataView.

Beachten Sie beim Zugriff auf DataTable-Objekte, dass für diese die Groß- bzw. Kleinschreibung bedingt beachtet werden muss. Wenn z. B. eine DataTable "mydatatable" und eine weitere "Mydatatable" benannt ist, wird in einer Zeichenfolge zum Suchen einer dieser Tabellen die Groß- und Kleinschreibung unterschieden. Wenn jedoch "mydatatable", aber nicht "Mydatatable" vorhanden ist, wird in der Suchzeichenfolge die Groß- und Kleinschreibung nicht unterschieden. Ein DataSet kann zwei DataTable-Objekte mit demselben TableName-Eigenschaftenwert, aber unterschiedlichen Namespace-Eigenschaftenwerten enthalten. Weitere Informationen über das Arbeiten mit DataTable-Objekten finden Sie unter Erstellen einer DataTable.

Beim programmgesteuerten Erstellen einer DataTable müssen Sie zuerst deren Schema definieren, indem Sie der DataColumnCollection (Zugriff über die Columns-Eigenschaft) DataColumn-Objekte hinzufügen. Weitere Informationen über das Hinzufügen von DataColumn-Objekten finden Sie unter Hinzufügen von Spalten zu einer Tabelle.

Wenn Sie einer DataTable Zeilen hinzufügen möchten, müssen Sie zunächst mit der NewRow-Methode ein neues DataRow-Objekt zurückgeben. Mit der NewRow-Methode wird eine Zeile zurückgegeben, die das durch die DataColumnCollection der Tabelle definierte Schema der DataTable enthält. Die maximale Anzahl von Zeilen, die in einer DataTable gespeichert werden kann, beträgt 16.777.216. Weitere Informationen finden Sie unter Hinzufügen von Daten zu einer Tabelle.

Die DataTable enthält außerdem eine Auflistung von Constraint-Objekten, mit denen die Datenintegrität sichergestellt werden kann. Weitere Informationen finden Sie unter Hinzufügen von Einschränkungen zu einer Tabelle.

Viele DataTable-Ereignisse stehen zur Verfügung, um zu bestimmen, ob Änderungen an einer Tabelle vorgenommen wurden, u. a. RowChanged, RowChanging, RowDeleting und RowDeleted. Weitere Informationen über die Ereignisse, die mit einer DataTable verwendet werden können, finden Sie unter Arbeiten mit DataTable-Ereignissen.

Wenn eine Instanz von DataTable erstellt wird, werden einige Lese-/Schreibeigenschaften auf die Anfangswerte festgelegt. Eine Liste dieser Werte finden Sie im Thema zum System.Data.DataTable-Konstruktor.

Hinweis

Das DataSet-Objekt und das DataTable-Objekt erben von MarshalByValueComponent und unterstützen die ISerializable-Schnittstelle für .NET Framework Remoting. Dies sind die einzigen ADO.NET-Objekte, die Sie für .NET Framework Remoting verwenden können.

Thema Position
Gewusst wie: Erstellen von DataTables Datenzugriff in Visual Studio
Gewusst wie: Erstellen von DataTables Datenzugriff in Visual Studio

Beispiel

Im folgenden Beispiel werden zwei DataTable-Objekte und ein DataRelation-Objekt erstellt, und die neuen Objekte werden einem DataSet hinzugefügt. Die Tabellen werden dann in einem DataGridView-Steuerelement angezeigt.

' Put the next line into the Declarations section.
private dataSet As DataSet 
 
Private Sub MakeDataTables()
    ' Run all of the functions. 
    MakeParentTable()
    MakeChildTable()
    MakeDataRelation()
    BindToDataGrid()
End Sub
 
Private Sub MakeParentTable()
    ' Create a new DataTable.
    Dim table As DataTable = new DataTable("ParentTable")

    ' Declare variables for DataColumn and DataRow objects.
    Dim column As DataColumn 
    Dim row As DataRow 
 
    ' Create new DataColumn, set DataType, ColumnName 
    ' and add to DataTable.    
    column = New DataColumn()
    column.DataType = System.Type.GetType("System.Int32")
    column.ColumnName = "id"
    column.ReadOnly = True
    column.Unique = True

    ' Add the Column to the DataColumnCollection.
    table.Columns.Add(column)
 
    ' Create second column.
    column = New DataColumn()
    column.DataType = System.Type.GetType("System.String")
    column.ColumnName = "ParentItem"
    column.AutoIncrement = False
    column.Caption = "ParentItem"
    column.ReadOnly = False
    column.Unique = False

    ' Add the column to the table.
    table.Columns.Add(column)
 
    ' Make the ID column the primary key column.
    Dim PrimaryKeyColumns(0) As DataColumn
    PrimaryKeyColumns(0)= table.Columns("id")
    table.PrimaryKey = PrimaryKeyColumns
 
    ' Instantiate the DataSet variable.
    dataSet = New DataSet()

    ' Add the new DataTable to the DataSet.
    dataSet.Tables.Add(table)
 
    ' Create three new DataRow objects and add 
    ' them to the DataTable
    Dim i As Integer
    For i = 0 to 2
       row = table.NewRow()
       row("id") = i
       row("ParentItem") = "ParentItem " + i.ToString()
       table.Rows.Add(row)
    Next i
End Sub
 
Private Sub MakeChildTable()
    ' Create a new DataTable.
    Dim table As DataTable = New DataTable("childTable")
    Dim column As DataColumn 
    Dim row As DataRow 
 
    ' Create first column and add to the DataTable.
    column = New DataColumn()
    column.DataType= System.Type.GetType("System.Int32")
    column.ColumnName = "ChildID"
    column.AutoIncrement = True
    column.Caption = "ID"
    column.ReadOnly = True
    column.Unique = True

    ' Add the column to the DataColumnCollection.
    table.Columns.Add(column)
 
    ' Create second column.
    column = New DataColumn()
    column.DataType= System.Type.GetType("System.String")
    column.ColumnName = "ChildItem"
    column.AutoIncrement = False
    column.Caption = "ChildItem"
    column.ReadOnly = False
    column.Unique = False
    table.Columns.Add(column)
 
    ' Create third column.
    column = New DataColumn()
    column.DataType= System.Type.GetType("System.Int32")
    column.ColumnName = "ParentID"
    column.AutoIncrement = False
    column.Caption = "ParentID"
    column.ReadOnly = False
    column.Unique = False
    table.Columns.Add(column)
 
    dataSet.Tables.Add(table)

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

    // Add the column to the DataColumnCollection.
    table.Columns.Add(column);
 
    // Create second column.
    column = new DataColumn();
    column.DataType= System.Type.GetType("System.String");
    column.ColumnName = "ChildItem";
    column.AutoIncrement = false;
    column.Caption = "ChildItem";
    column.ReadOnly = false;
    column.Unique = false;
    table.Columns.Add(column);
 
    // Create third column.
    column = new DataColumn();
    column.DataType= System.Type.GetType("System.Int32");
    column.ColumnName = "ParentID";
    column.AutoIncrement = false;
    column.Caption = "ParentID";
    column.ReadOnly = false;
    column.Unique = false;
    table.Columns.Add(column);
 
    dataSet.Tables.Add(table);

    // Create three sets of DataRow objects, 
    // five rows each, and add to DataTable.
    for(int i = 0; i <= 4; i ++)
    {
        row = table.NewRow();
        row["childID"] = i;
        row["ChildItem"] = "Item " + i;
        row["ParentID"] = 0 ;
        table.Rows.Add(row);
    }
    for(int i = 0; i <= 4; i ++)
    {
        row = table.NewRow();
        row["childID"] = i + 5;
        row["ChildItem"] = "Item " + i;
        row["ParentID"] = 1 ;
        table.Rows.Add(row);
    }
    for(int i = 0; i <= 4; i ++)
    {
        row = table.NewRow();
        row["childID"] = i + 10;
        row["ChildItem"] = "Item " + i;
        row["ParentID"] = 2 ;
        table.Rows.Add(row);
    }
}
 
private void MakeDataRelation()
{
    // DataRelation requires two DataColumn 
    // (parent and child) and a name.
    DataColumn parentColumn = 
        dataSet.Tables["ParentTable"].Columns["id"];
    DataColumn childColumn = 
        dataSet.Tables["ChildTable"].Columns["ParentID"];
    DataRelation relation = new 
        DataRelation("parent2Child", parentColumn, childColumn);
    dataSet.Tables["ChildTable"].ParentRelations.Add(relation);
}
 
private void BindToDataGrid()
{
    // Instruct the DataGrid to bind to the DataSet, with the 
    // ParentTable as the topmost DataTable.
    dataGrid1.SetDataBinding(dataSet,"ParentTable");
}

Vererbungshierarchie

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

Threadsicherheit

Dieser Typ ist bei Multithread-Lesevorgängen sicher. Sie müssen alle Schreibvorgänge synchronisieren.

Plattformen

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

.NET Compact Framework

Unterstützt in: 2.0, 1.0

Siehe auch

Referenz

DataTable-Member
System.Data-Namespace

Weitere Ressourcen

Erstellen und Verwenden von DataTables