Rijstatussen en rijversies
ADO.NET beheert rijen in tabellen met rijstatussen en versies. Een rijstatus geeft de status van een rij aan; rijversies behouden de waarden die zijn opgeslagen in een rij terwijl deze worden gewijzigd, inclusief de huidige, oorspronkelijke en standaardwaarden. Nadat u bijvoorbeeld een wijziging hebt aangebracht in een kolom in een rij, heeft de rij een rijstatus van Modified
en twee rijversies: Current
, die de huidige rijwaarden bevat en Original
, die de rijwaarden bevat voordat de kolom werd gewijzigd.
Elk DataRow object heeft een RowState eigenschap die u kunt onderzoeken om de huidige status van de rij te bepalen. De volgende tabel geeft een korte beschrijving van elke RowState
opsommingswaarde.
RowState-waarde | Beschrijving |
---|---|
Unchanged | Er zijn geen wijzigingen aangebracht sinds de laatste aanroep van AcceptChanges of sinds de rij is gemaakt door DataAdapter.Fill . |
Added | De rij is toegevoegd aan de tabel, maar AcceptChanges is niet aangeroepen. |
Modified | Een element van de rij is gewijzigd. |
Deleted | De rij is verwijderd uit een tabel en AcceptChanges is niet aangeroepen. |
Detached | De rij maakt geen deel uit van een DataRowCollection . De RowState nieuwe rij is ingesteld op Detached . Nadat de nieuwe DataRow is toegevoegd aan de DataRowCollection methode door de Add methode aan te roepen, wordt de waarde van de RowState eigenschap ingesteld op Added .Detached is ook ingesteld voor een rij die is verwijderd uit een DataRowCollection met behulp van de Remove methode of door de Delete methode gevolgd door de AcceptChanges methode. |
Wanneer AcceptChanges
wordt aangeroepen op een DataSet, DataTable of DataRow, worden alle rijen met een rijstatus Deleted
verwijderd. De resterende rijen krijgen de rijstatus Unchanged
en de waarden in de Original
rijversie worden overschreven met de Current
rijversiewaarden. Wanneer RejectChanges
wordt aangeroepen, worden alle rijen met de rijstatus Added
verwijderd. De resterende rijen krijgen de rijstatus Unchanged
en de waarden in de Current
rijversie worden overschreven met de Original
rijversiewaarden.
U kunt de verschillende rijversies van een rij weergeven door een DataRowVersion parameter door te geven met de kolomreferentie, zoals wordt weergegeven in het volgende voorbeeld.
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();
De volgende tabel geeft een korte beschrijving van elke DataRowVersion
opsommingswaarde.
DataRowVersion-waarde | Beschrijving |
---|---|
Current | De huidige waarden voor de rij. Deze rijversie bestaat niet voor rijen met een RowState van Deleted . |
Default | De standaardrijversie voor een bepaalde rij. De standaardrijversie voor een Added , Modified of Deleted rij is Current . De standaardrijversie voor een Detached rij is Proposed . |
Original | De oorspronkelijke waarden voor de rij. Deze rijversie bestaat niet voor rijen met een RowState van Added . |
Proposed | De voorgestelde waarden voor de rij. Deze rijversie bestaat tijdens een bewerking voor een rij of voor een rij die geen deel uitmaakt van een DataRowCollection . |
U kunt testen of een DataRow
bepaalde rijversie heeft door de HasVersion methode aan te roepen en een DataRowVersion
als argument door te geven. Retourneert false
bijvoorbeeld DataRow.HasVersion(DataRowVersion.Original)
voor nieuw toegevoegde rijen voordat AcceptChanges
deze is aangeroepen.
In het volgende codevoorbeeld worden de waarden weergegeven in alle verwijderde rijen van een tabel. Deleted
rijen hebben Current
geen rijversie, dus u moet doorgeven DataRowVersion.Original
bij het openen van de kolomwaarden.
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();
}