Satır Durumları ve Satır Sürümleri

ADO.NET, satır durumlarını ve sürümlerini kullanarak tablolardaki satırları yönetir. Satır durumu, satırın durumunu gösterir; satır sürümleri, geçerli, özgün ve varsayılan değerler de dahil olmak üzere değiştirildiği sırada bir satırda depolanan değerleri korur. Örneğin, satırdaki bir sütunda değişiklik yaptıktan sonra, satırda satır durumu Modifiedve geçerli satır değerlerini Originaliçeren iki satır sürümü olur: Currentve sütun değiştirilmeden önce satır değerlerini içerir.

Her DataRow nesnenin, satırın geçerli durumunu belirlemek için inceleyebileceğiniz bir RowState özelliği vardır. Aşağıdaki tabloda her RowState numaralandırma değerinin kısa bir açıklaması yer alır.

RowState değeri Açıklama
Unchanged Satırın tarafından DataAdapter.Filloluşturulduğu son çağrıdan AcceptChanges bu yana veya bu yana hiçbir değişiklik yapılmadı.
Added Satır tabloya eklenmiştir, ancak AcceptChanges çağrılmamıştır.
Modified Satırın bazı öğesi değiştirildi.
Deleted Satır bir tablodan silinmiş ve AcceptChanges çağrılmamış.
Detached Satır herhangi bir DataRowCollectionöğesinin parçası değildir. RowState Yeni oluşturulan satırın değeri olarak Detachedayarlanır. yöntemi çağrılarak AddDataRowCollection yeni DataRow öğesine eklendikten sonra özelliğinin RowState değeri olarak Addedayarlanır.

Detached, yöntemi kullanılarak Remove veya Delete yönteminin ardından AcceptChanges yöntemiyle kaldırılmış bir DataRowCollection satır için de ayarlanır.

, veya üzerinde çağrıldığındaAcceptChanges, satır durumu Deleted olan tüm satırlar kaldırılır.DataSetDataRowDataTable Kalan satırlara satır durumu Unchangedverilir ve satır sürümündeki değerlerin Original üzerine satır sürümü değerleri yazılır Current . Çağrıldığında RejectChanges , satır durumu Added olan tüm satırlar kaldırılır. Kalan satırlara satır durumu Unchangedverilir ve satır sürümündeki değerlerin Current üzerine satır sürümü değerleri yazılır Original .

Aşağıdaki örnekte gösterildiği gibi sütun başvurusuna sahip bir DataRowVersion parametre geçirerek satırın farklı satır sürümlerini görüntüleyebilirsiniz.

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();  

Aşağıdaki tabloda her DataRowVersion numaralandırma değerinin kısa bir açıklaması yer alır.

DataRowVersion değeri Açıklama
Current Satırın geçerli değerleri. Bu satır sürümü, içeren RowStateDeletedsatırlar için mevcut değildir.
Default Belirli bir satır için varsayılan satır sürümü. bir Added, Modifiedveya Deleted satırı için varsayılan satır sürümü şeklindedir Current. Bir satırın varsayılan satır sürümü Detached şeklindedir Proposed.
Original Satırın özgün değerleri. Bu satır sürümü, içeren RowStateAddedsatırlar için mevcut değildir.
Proposed Satır için önerilen değerler. Bu satır sürümü, bir satırdaki düzenleme işlemi sırasında veya bir öğesinin parçası olmayan bir DataRowCollectionsatır için var olur.

yöntemini çağırıp bağımsız değişken olarak geçirerek bir DataRow öğesinin HasVersion belirli bir DataRowVersion satır sürümüne sahip olup olmadığını test edebilirsiniz. Örneğin, DataRow.HasVersion(DataRowVersion.Original) çağrılmadan önce AcceptChanges yeni eklenen satırlar için döndürürfalse.

Aşağıdaki kod örneği, bir tablonun silinen tüm satırlarındaki değerleri görüntüler. Deleted satırların satır sürümü yoktur Current , bu nedenle sütun değerlerine erişirken geçirmeniz DataRowVersion.Original gerekir.

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();  
}  

Ayrıca bkz.