Delen via


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 Modifieden 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 Unchangeden 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 Unchangeden 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, Modifiedof 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();  
}  

Zie ook