1. 程式人生 > >DataTable.AcceptChanges方法有何用處

DataTable.AcceptChanges方法有何用處

提交自上次呼叫 AcceptChanges 以來對該表進行的所有更改。

呼叫 AcceptChanges 後,再用 DataAdapter.Update() 不會有任何新資料被更新到資料庫中。那……那它有什麼用處呢?

以前的做法:

Fill –> Edit –>Update –> 重新Fill –> Edit –> Update –> ……

“更新了資料當然要重新獲取啦!”,再次更新後,再再次重新獲取。

現在的做法:

Fill –> Edit –> Update –> AcceptChanges –> Edit –> Update –> AcceptChanges –> Edit –> Update –> ……

開始獲取一次就好了,反正你更新了資料後再獲取的不就是你剛才更新的嗎,幹嘛還要獲取一遍呢?

AcceptChanges 在 Update 後 !

-----------------------------------------醜陋分割線-------------------------------------------------------------

最近在園子裡看了幾篇相關的文章,總結了一下(還請多多指正):
Delete()是面向物件狀態操作的(可以回滾);RemoveAt()是面向普通集合操作的(不可以回滾,等價於先Delete()後AcceptChanges())

DataTable.AcceptChanges方法
提交自上次呼叫 AcceptChanges 以來對該表進行的所有更改。呼叫 AcceptChanges 時,任何仍處於編輯模式的 DataRow 物件將成功結束其編輯。DataRowState 也會隨之更改:所有狀態為 Added 和 Modified 的行的狀態都變為 Unchanged;狀態為 Deleted 的行則被移除。
在您嘗試使用 DbDataAdapter.Update 方法更新 DataSet 之後,通常會對 DataTable 呼叫 AcceptChanges 方法。 DataTable.RejectChanges方法
回滾自該表載入以來或上次呼叫 AcceptChanges 以來對該表進行的所有更改。
呼叫 RejectChanges 時,任何仍處於編輯模式的 DataRow 物件將取消其編輯。新行被移除。DataRowState 設定為 Modified 或 Deleted 的行返回到其初始狀態。 使用 Delete 方法後,RowState 變成“已刪除”。在您呼叫 AcceptChanges 之前,它一直保持“已刪除”。可通過呼叫 RejectChanges 取消刪除行。 而RemoveAt表示當移除行時,該行中的所有資料都將丟失。您還可以呼叫 DataRow 類的 Delete 方法來標記某行以供移除。呼叫 RemoveAt 等同於先呼叫 Delete 再呼叫 AcceptChanges。 也就是說使用Delete()方法刪除行後是可以回滾的,而使用RemoveAt(int)方法是不能回滾的。 總結:
1、Delete()之前接收了AcceptChanges()後,都只加上刪除標記,以後再次接受了AcceptChanges()後才真正刪除,否則沒有再次接受AcceptChanges()遇到RejectChanges()可以回滾
2、Delete()之前沒有接收AcceptChanges(),之後立即接受AcceptChanges(),也真正刪除
3、Delete()之前沒有接收AcceptChanges(),之後也沒立即接受AcceptChanges(),會徹底刪除:因為沒有必要回滾