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 Modified
ve geçerli satır değerlerini Original
içeren iki satır sürümü olur: Current
ve 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.Fill oluş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 Detached ayarlanır. yöntemi çağrılarak Add DataRowCollection yeni DataRow öğesine eklendikten sonra özelliğinin RowState değeri olarak Added ayarlanı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 Unchanged
verilir 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 Unchanged
verilir 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 RowState Deleted satırlar için mevcut değildir. |
Default | Belirli bir satır için varsayılan satır sürümü. bir Added , Modified veya 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 RowState Added satı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 DataRowCollection satı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();
}