Stany wiersza i wersje wiersza
ADO.NET zarządza wierszami w tabelach przy użyciu stanów wierszy i wersji. Stan wiersza wskazuje stan wiersza; Wersje wierszy zachowują wartości przechowywane w wierszu, ponieważ są modyfikowane, w tym bieżące, oryginalne i domyślne. Na przykład po wprowadzeniu modyfikacji kolumny w wierszu wiersz będzie miał stan Modified
wiersza i dwie wersje wierszy: Current
, która zawiera bieżące wartości wierszy i Original
, która zawiera wartości wierszy przed zmodyfikowaniem kolumny.
Każdy DataRow obiekt ma RowState właściwość, którą można zbadać, aby określić bieżący stan wiersza. Poniższa tabela zawiera krótki opis każdej RowState
wartości wyliczenia.
Wartość RowState | opis |
---|---|
Unchanged | Od ostatniego wywołania AcceptChanges metody lub od momentu utworzenia wiersza przez program nie wprowadzono żadnych zmian.DataAdapter.Fill |
Added | Wiersz został dodany do tabeli, ale AcceptChanges nie został wywołany. |
Modified | Niektóre elementy wiersza zostały zmienione. |
Deleted | Wiersz został usunięty z tabeli i AcceptChanges nie został wywołany. |
Detached | Wiersz nie jest częścią żadnego DataRowCollection elementu . Nowo RowState utworzony wiersz ma wartość Detached . Po dodaniu nowego DataRow elementu do DataRowCollection metody przez wywołanie Add metody wartość RowState właściwości jest ustawiona na Added wartość .Detached parametr jest również ustawiany dla wiersza, który został usunięty z DataRowCollection metody przy użyciu Remove metody lub przez Delete metodę, po której następuje AcceptChanges metoda . |
Gdy AcceptChanges
jest wywoływana w obiekcie DataSet, DataTable lub DataRow, wszystkie wiersze ze stanem Deleted
wiersza są usuwane. Pozostałe wiersze mają stan wiersza , Unchanged
a wartości w Original
wersji wiersza są zastępowane wartościami Current
wersji wiersza. Po RejectChanges
wywołaniu wszystkie wiersze ze stanem Added
wiersza zostaną usunięte. Pozostałe wiersze mają stan wiersza , Unchanged
a wartości w Current
wersji wiersza są zastępowane wartościami Original
wersji wiersza.
Różne wersje wierszy wiersza można wyświetlić, przekazując DataRowVersion parametr z odwołaniem do kolumny, jak pokazano w poniższym przykładzie.
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();
Poniższa tabela zawiera krótki opis każdej DataRowVersion
wartości wyliczenia.
Wartość DataRowVersion | opis |
---|---|
Current | Bieżące wartości dla wiersza. Ta wersja wiersza nie istnieje dla wierszy z wartością RowState Deleted . |
Default | Domyślna wersja wiersza dla określonego wiersza. Domyślna wersja wiersza dla Added wiersza , Modified lub Deleted to Current . Domyślna wersja wiersza dla Detached wiersza to Proposed . |
Original | Oryginalne wartości dla wiersza. Ta wersja wiersza nie istnieje dla wierszy z wartością RowState Added . |
Proposed | Proponowane wartości dla wiersza. Ta wersja wiersza istnieje podczas operacji edycji w wierszu lub dla wiersza, który nie jest częścią elementu DataRowCollection . |
Możesz sprawdzić, czy element DataRow
ma określoną wersję wiersza, wywołując HasVersion metodę i przekazując DataRowVersion
argument jako argument. Na przykład DataRow.HasVersion(DataRowVersion.Original)
funkcja zwróci false
nowo dodane wiersze przed AcceptChanges
wywołaniami.
Poniższy przykład kodu przedstawia wartości we wszystkich usuniętych wierszach tabeli. Deleted
wiersze nie mają Current
wersji wiersza, dlatego należy przekazać DataRowVersion.Original
je podczas uzyskiwania dostępu do wartości kolumn.
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();
}