[ADO.NET] 何謂 RowState

[ADO.NET] 何謂 RowState

1.RowState 屬性 是記錄使用者在離線狀態下對DataRow所進行的變動,它可表示DataTable由資料庫取出後到目前為止是否被變更,DataRowState 列舉型別如下圖:

2009-11-11 上午 10-55-20

2.DataRowVersion 列舉型別 是用來記錄DataRow所包含的版本,成員如下圖:

2009-11-11 上午 11-01-17

下圖為MSDN所敘述的版本變更行為:

2009-11-11 上午 11-11-05

3.若是呼叫DataTable的AcceptChanges方法或是DataRow的AcceptChanges方法,都會將所有RowState狀態為 Added 和 Modified 的資料列變更為 Unchanged,而為Deleted 的資料列則會被移除。

4.DataRow的SetAdded方法可變更RowState為Added,SetModified可變更RowState為Modified

5.觀察RowState的變化,首先建立一個DataTable,再針對DataTable進行新增、修改、刪除等動作,觀察其變化

5-1.使用北風資料庫建立DataTable

2009-11-11 上午 11-21-35

5-2.執行"新增",其程式是使用DataRowCollectionAdd方法或DataRow的NewRow方法新增一個列。

2009-11-11 上午 11-37-09

5-3.依狀態條件取得DataRowVersion 的值。取得DataRow的用法請看DataRow.Item屬性

2009-11-11 下午 12-07-53

5-4.觀察其結果,新增的資料,RowState為Added

2009-11-11 下午 12-18-20

5-5.執行"存檔",程式是執行AcceptChanges方法,可以發現RowState為Unchanged

2009-11-11 下午 12-20-29

5-6.執行"修改",將"霹靂無敵"修改成"修改值",可發現RowState為Modified,且DataRow的Current(目前)與Original(原始)版本不同

2009-11-11 下午 12-25-58

5-7.執行"刪除",可發現可發現RowState為Deleted,因被刪除所以也看不到資料。

2009-11-11 下午 12-34-17

基本上由範例的左邊按到右邊,即可觀察變化

2009-11-11 下午 01-18-30

6.DataRow的HasVersion方法判斷是否有指定的版本。由下程式我們可以判斷每一個DataRow的RowState至少都有Current、Default

2009-11-11 下午 01-01-29 

7.DataRow的RejectChanges及DataTable的RejectChanges方法,兩個方法都可以還原呼叫AcceptChanges方法以前的資料

另有一疑問

DataRow的多載在MSDN中的哪篇有敘述呢?我找半天卻找不到,應該是我不會找,有哪位好心人可以跟我講(提供連結)

2009-11-11 下午 12-13-35 

範例下載

CS_DataRowState.rar

VB_DataRowState.rar

 

若有謬誤,煩請告知,新手發帖請多包涵


Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2025 .NET

Image result for microsoft+mvp+logo