Freigeben über


Zeilenstatus und Zeilenversion

Aktualisiert: November 2007

ADO.NET verwaltet Zeilen in Tabellen mithilfe des Zeilenstatus und der Zeilenversion. Ein Zeilenstatus gibt den Status einer Zeile an. In Zeilenversionen werden die Werte, die in einer Zeile gespeichert werden, während der Bearbeitung verwaltet. Zu diesen Werten zählen z. B. die Werte current, original und default. Wenn Sie beispielsweise eine Spalte in einer Zeile geändert haben, weist die Zeile den Zeilenstatus Modified und die folgenden beiden Zeilenversionen auf: Current mit den aktuellen Zeilenwerten und Original mit den Zeilenwerten vor den Änderungen der Spalte.

Jedes DataRow-Objekt hat eine RowState-Eigenschaft, über die Sie den aktuellen Status der Zeile überprüfen können. Die folgende Tabelle enthält eine kurze Beschreibung der einzelnen RowState-Enumerationswerte.

"RowState"-Wert

Beschreibung

Unchanged

Seit dem letzten Aufruf von AcceptChanges oder seit der Erstellung der Zeile durch DataAdapter.Fill wurden keine Änderungen ausgeführt.

Added

Die Zeile wurde der Tabelle hinzugefügt, AcceptChanges wurde aber nicht aufgerufen.

Modified

Ein Element der Zeile wurde geändert.

Deleted

Die Zeile wurde aus einer Tabelle gelöscht, und AcceptChanges wurde nicht aufgerufen.

Detached

Die Zeile ist nicht Teil einer DataRowCollection. Der RowState einer neu erstellten Zeile wird auf Detached festgelegt. Nach dem Hinzufügen der neuen DataRow zur DataRowCollection durch Aufrufen der Add-Methode wird der Wert der RowState-Eigenschaft auf Added festgelegt.

Detached wird auch für eine Zeile festgelegt, die mit der Remove-Methode bzw. mit der Delete-Methode, gefolgt von der AcceptChanges-Methode, aus einer DataRowCollection entfernt wurde.

Wenn AcceptChanges für einen DataSet, eine DataTable oder eine DataRow aufgerufen wird, werden alle Zeilen mit dem Zeilenstatus Deleted entfernt. Die verbleibenden Zeilen erhalten den Zeilenstatus Unchanged, und die Werte in der Zeilenversion Original werden mit den Werten der Zeilenversion Current überschrieben. Wenn RejectChanges aufgerufen wird, werden alle Zeilen mit dem Zeilenstatus Deleted entfernt. Die verbleibenden Zeilen erhalten den Zeilenstatus Unchanged, und die Werte in der Zeilenversion Current werden mit den Werten der Zeilenversion Original überschrieben.

Sie können die verschiedenen Zeilenversionen einer Zeile anzeigen, indem Sie einen DataRowVersion-Parameter mit dem Spaltenverweis übergeben. Dies wird im folgenden Beispiel dargestellt.

Dim custRow As DataRow = custTable.Rows(0)
Dim custID As String = custRow("CustomerID", DataRowVersion.Original).ToString()
DataRow custRow = custTable.Rows[0];
string custID = custRow["CustomerID", DataRowVersion.Original].ToString();

Die folgende Tabelle enthält eine kurze Beschreibung aller DataRowVersion-Enumerationswerte.

"DataRowVersion"-Wert

Beschreibung

Current

Die aktuellen Werte der Zeile. Diese Zeilenversion ist für Zeilen, deren RowState auf Deleted festgelegt ist, nicht vorhanden.

Default

Die Standardzeilenversion einer bestimmten Zeile. Die Standardzeilenversion für eine Zeile mit dem Status Added, Modified oder Unchanged lautet Current. Die Standardzeilenversion für eine Zeile mit dem Status Deleted lautet Original. Die Standardzeilenversion für eine Zeile mit dem Status Detached lautet Proposed.

Original

Die ursprünglichen Werte der Zeile. Diese Zeilenversion ist für Zeilen, deren RowState auf Added festgelegt ist, nicht vorhanden.

Proposed

Die vorgeschlagenen Werte für die Zeile. Diese Zeilenversion ist während der Bearbeitung einer Zeile vorhanden oder wird für Zeilen verwendet, die nicht Teil einer DataRowCollection sind.

Sie können überprüfen, ob eine DataRow eine bestimmte Zeilenversion aufweist, indem Sie die HasVersion-Methode aufrufen und eine DataRowVersion als Argument übergeben. So gibt z. B. DataRow.HasVersion(DataRowVersion.Original) für neu hinzugefügte Zeilen vor dem Aufrufen von AcceptChanges den Wert false zurück.

Das folgende Codebeispiel zeigt die Werte in allen gelöschten Zeilen einer Tabelle an. Zeilen mit dem Zeilenstatus Deleted besitzen keine Current-Zeilenversion. Daher müssen Sie DataRowVersion.Original übergeben, wenn Sie auf die Spaltenwerte zugreifen.

Dim catTable As DataTable = catDS.Tables("Categories")

Dim delRows() As DataRow = catTable.Select(Nothing, Nothing, DataViewRowState.Deleted)

Console.WriteLine("Deleted rows:" & vbCrLf)

Dim catCol As DataColumn
Dim delRow As DataRow

For Each catCol In catTable.Columns
  Console.Write(catCol.ColumnName & vbTab)
Next
Console.WriteLine()

For Each delRow In delRows
  For Each catCol In catTable.Columns
    Console.Write(delRow(catCol, DataRowVersion.Original) & vbTab)
  Next
  Console.WriteLine()
Next
DataTable catTable = catDS.Tables["Categories"];

DataRow[] delRows = catTable.Select(null, null, DataViewRowState.Deleted);

Console.WriteLine("Deleted rows:\n");

foreach (DataColumn catCol in catTable.Columns)
  Console.Write(catCol.ColumnName + "\t");
Console.WriteLine();

foreach (DataRow delRow in delRows)
{
  foreach (DataColumn catCol in catTable.Columns)
    Console.Write(delRow[catCol, DataRowVersion.Original] + "\t");
  Console.WriteLine();
}

Siehe auch

Weitere Ressourcen

Bearbeiten von Daten in einer DataTable

'DataSets', 'DataTables' und 'DataViews' (ADO.NET)

'DataAdapters' und 'DataReaders' (ADO.NET)