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 參數,您可以查看行的不同行版本,如下例所示。
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