DataTable
Eintrag zuletzt aktualisiert am: 07.03.2004
Ein DataTable-Objekt repräsentiert genau eine Tabelle mit n Spalten und m Zeilen. Ein DataTable-Objekt ist aber nicht der direkte Nachfolger eines RecordSet-Objekts. Zwar repräsentiert DataTable eine Tabelle, jedoch benötigt ein DataTable zwingend die Hilfe anderer Klassen (
DataSet, OleDb
DataAdapter), um Daten aus einer Datenquelle einlesen bzw. ändern zu können. Ein DataTable-Objekt kann aber auch ohne Datenquelle dynamisch im Hauptspeicher erzeugt werden.
Bewegung durch die Datensätze
Die Arbeit mit einem DataTable-Objekt ist wesentlich objektorientierter als die Arbeit mit einem RecordSet-Objekt aus dem klassischen
ADO.
Vergleich zu
ADO
Ein RecordSet-Objekt ist einerseits eine ganze Tabelle, aber andererseits zu einem bestimmten Zeitpunkt immer nur genau ein Datensatz – ähnlich wie beim
DataReader. In einem RecordSet gibt es eine
Objektmenge zum Durchlaufen der Spalten (
Fields-Collection); die Iteration über die Zeilen erfolgt aber nicht objektorientiert, sondern mit MoveNext() und Prüfung auf das Tabellenende (
EOS).
Rows
Eine DataTable in
ADO.NET verweist dagegen im
Attribut Rows auf eine Collection vom Typ DataRowCollection, mit der die Zeilen der Tabelle (mit For Each) durchlaufen werden können.
' --- Schleife über alle Datensätze
For Each DR In DT.Rows
Next
Index
Eine einzelne Zeile besitzt keinen Namen, kann aber über einen numerischen Index direkt angesprochen werden. Der Index beginnt bei 0 (Zeile 1) und läuft dementsprechend bis ZEILENANZAHL-1.
' --- Zugriff auf die 3. Zeile
DR = DT.Rows.Item(2)
Count
Die Anzahl der Datensätze in einer Tabelle kann über das
Attribut Count ermittelt werden.
Anzahl = DT.Rows.Count
Spaltennamen / DataColumn
Zur Ermittlung der Spaltennamen gibt es im DataTable-Objekt eine Collection Columns vom Typ DataColumnCollection mit einzelnen DataColumn-Objekten.
' --- Ermittlung einer CDV-
Liste der Spaltennamen
For Each DC In DT.Columns
zeile += IIf(zeile <> "", ";", "").ToString
zeile += DC.ColumnName
Next
Die Collection DataColumns entspricht der
Fields-Collection aus dem klassischen
ADO.
Tabelleninhalte
Der Zugriff auf die Inhalte erfolgt über das DataRow-Objekt. Dieses Objekt liefert über das indizierte
Attribut Item() den Inhalt einer bestimmten Spalte.
DataRow.item("SpaltenName")
Genau wie im klassischen
ADO kann dieser Ausdruck in zwei Formen verkürzt werden:
DataRow!SpaltenName
DataRow("SpaltenName")
Außerdem ist nicht nur der Zugriff über den Spaltennamen, sondern auch über einen numerischen Index (Spalte 1 hat den Index 0) möglich.
DataRow.item(IN
DEX)
DataRow(IN
DEX)