行狀態與行版本 C# DataSet DataRow

ADO.NET 用行狀態和行版本管理表中的行。行狀態指示行的狀態;行版本在修改行中存儲的值時維護各個階段的值,包括當前值、原始值和默認值。例如,在修改了行中的某列後,該行的行狀態將爲 Modified,並且有兩個行版本:Current(包含行的當前值)和 Original(包含列修改前行的值)。

每個 DataRow 對象都具有 RowState 屬性,您可以檢查此屬性來確定行的當前狀態。下表給出了對每個 RowState 枚舉值的簡要說明。

 
RowState 值 說明

Unchanged

自上次調用 AcceptChanges 之後,或自 DataAdapter.Fill 創建了行之後,未做出過任何更改。

Added

已將行添加到表中,但尚未調用 AcceptChanges。

Modified

已更改了行的某個元素。

Deleted

已將該行從表中刪除,並且尚未調用 AcceptChanges。

Detached

該行不屬於任何 DataRowCollection。新建行的 RowState 設置爲 Detached。通過調用 Add 方法將新的 DataRow 添加到 DataRowCollection 之後,RowState 屬性的值設置爲 Added。

對於已經使用 Remove 方法(或是在使用 Delete 方法之後使用了 AcceptChanges 方法)從 DataRowCollection 中移除的行,也設置爲 Detached。

在 DataSet、DataTable 或 DataRow 上調用 AcceptChanges 時,會移除行狀態爲 Deleted 的所有行。剩餘的行會被賦予 Unchanged 行狀態,並且 Original 行版本中的值會改寫爲 Current 行版本值。調用 RejectChanges 時,會移除行狀態爲 Added 的所有行。剩餘的行會被賦予 Unchanged 行狀態,並且 Current 行版本中的值會改寫爲 Original 行版本值。

通過用列引用來傳遞 DataRowVersion 參數,您可以查看行的不同行版本,如下例所示。

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

下表給出了對每個 DataRowVersion 枚舉值的簡要說明。

 
DataRowVersion 值 說明

Current

行的當前值。對於 RowState 爲 Deleted 的行,則不存在此行版本。

Default

特定行的默認行版本。Added、Modified 或 Unchanged 行的默認行版本是 Current。Deleted 行的默認行版本是 Original。Detached 行的默認行版本是 Proposed。

Original

行的原始值。對於 RowState 爲 Added 的行,則不存在此行版本。

Proposed

行的建議值。在對行進行編輯操作期間,或對於不屬於 DataRowCollection 的行,存在此行版本。

通過調用 HasVersion 方法並將 DataRowVersion 作爲參數傳遞,您可以測試 DataRow 是否具有特定的行版本。例如,在調用 AcceptChanges 之前,DataRow.HasVersion(DataRowVersion.Original) 對新添加的行將返回 false。

例如,以下代碼示例顯示了表中所有已刪除行的值。Deleted 行沒有 Current 行版本,因此在訪問列值時必須傳遞 DataRowVersion.Original

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章