Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
ADO.NET verwaltet Zeilen in Tabellen mithilfe von Zeilenzuständen und -versionen. Ein Zeilenstatus gibt den Status einer Zeile an; Zeilenversionen verwalten die in einer Zeile gespeicherten Werte, während sie geändert werden, einschließlich aktueller, ursprünglicher und Standardwerte. Nachdem Sie beispielsweise eine Änderung an einer Spalte in einer Zeile vorgenommen haben, weist die Zeile den Zeilenstatus Modifiedund zwei Zeilenversionen auf: Current, die die aktuellen Zeilenwerte enthält und Originaldie die Zeilenwerte enthält, bevor die Spalte geändert wurde.
Jedes DataRow Objekt verfügt über eine RowState Eigenschaft, die Sie untersuchen können, um den aktuellen Status der Zeile zu bestimmen. Die folgende Tabelle enthält eine kurze Beschreibung der einzelnen RowState Enumerationswerte.
| "RowState"-Wert | BESCHREIBUNG |
|---|---|
| Unchanged | Entweder seit dem letzten Aufruf von AcceptChanges oder seit der Erstellung der Zeile durch DataAdapter.Fill wurden keine Änderungen vorgenommen. |
| Added | Die Zeile wurde der Tabelle hinzugefügt, jedoch wurde AcceptChanges 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 eines DataRowCollection. Die RowState-Eigenschaft einer neu erstellten Zeile wird auf Detached festgelegt. Nachdem das neue DataRow durch Aufrufen der DataRowCollection-Methode zu Add hinzugefügt wurde, wird der Wert der RowState-Eigenschaft auf Added festgelegt.Detached wird auch für eine Zeile festgelegt, die aus einer DataRowCollection mithilfe der Remove Methode entfernt wurde, oder durch die Delete Methode gefolgt von der AcceptChanges Methode. |
Wenn AcceptChanges auf ein DataSet, DataTable oder DataRow aufgerufen wird, werden alle Zeilen entfernt, die einen Zeilenstatus von Deleted haben. Die verbleibenden Zeilen erhalten einen Zeilenstatus von Unchanged, und die Werte in der Original Zeilenversion werden mit den Current Zeilenversionswerten überschrieben. Wenn RejectChanges aufgerufen wird, werden alle Zeilen mit einem Zeilenstatus von Added entfernt. Die verbleibenden Zeilen erhalten einen Zeilenstatus von Unchanged, und die Werte in der Current Zeilenversion werden mit den Original Zeilenversionswerten überschrieben.
Sie können die verschiedenen Zeilenversionen einer Zeile anzeigen, indem Sie einen DataRowVersion Parameter mit dem Spaltenverweis übergeben, wie im folgenden Beispiel gezeigt.
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 der einzelnen DataRowVersion Enumerationswerte.
| "DataRowVersion"-Wert | BESCHREIBUNG |
|---|---|
| Current | Die aktuellen Werte für die Zeile. Diese Zeilenversion ist für Zeilen, deren RowState auf Deleted festgelegt ist, nicht vorhanden. |
| Default | Die Standardzeilenversion für eine bestimmte Zeile. Die Standardzeilenversion für eine Added, Modified oder Deleted Zeile ist Current. Die Standardzeilenversion für eine Detached Zeile lautet Proposed. |
| Original | Die ursprünglichen Werte für die 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 eines Bearbeitungsvorgangs für eine Zeile oder für eine Zeile vorhanden, die nicht Teil einer DataRowCollectionZeile ist. |
Sie können testen, ob eine bestimmte Zeilenversion von DataRow vorliegt, indem Sie die HasVersion-Methode aufrufen und ein DataRowVersion als Argument übergeben. Beispielsweise gibt DataRow.HasVersion(DataRowVersion.Original) für neu hinzugefügte Zeilen false zurück, bevor AcceptChanges aufgerufen wurde.
Im folgenden Codebeispiel werden die Werte in allen gelöschten Zeilen einer Tabelle angezeigt.
Deleted Zeilen haben keine Current Zeilenversion, daher müssen Sie DataRowVersion.Original beim Zugriff auf die Spaltenwerte übergeben.
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();
}