2011-04-19 17 views

回答

7

這裏的documentation

當的AcceptChanges被調用時,任何 DataRow對象仍處於編輯模式 成功結束其編輯。 DataRowState也發生了變化:全部添加了 ,並且修改的行變爲未更改, 並刪除了刪除的行。

AcceptChanges方法一般 叫上一個DataTable是後你 嘗試更新使用 的DbDataAdapter.Update方法的數據集。

因此,您的實際數據庫不受影響。

2

只會影響數據表。沒有任何數據庫表。

8

AcceptChanges()的目的是讓DataTable知道它的數據已被保存到數據庫中。 DataTable中的所有DataRows都將其row.RowState設置爲DataRowState.Unchanged。

它不會將數據保存到數據庫。這是分開完成的。

+0

這仍然有點混淆......如果我添加一行,並將其標記爲ADDED,似乎通過調用DT.ACCEPTCHANGES,該行的狀態變爲UNCHANGED ...我想混淆起作用,如果這樣做後,我做一個DATAADAPTER.UPDATE (DT),這個調用看看現在的UNCHANGED狀態,而不是試圖改變數據庫嗎?或者相反,不管DT行狀態如何,UPDATE都會將DATATABLE中的行與數據庫中的行進行比較? – flaZer 2014-12-30 00:41:26

+0

好吧,如果我正確讀取它,看起來像DA.UPDATE(DT)之前調用DT.ACCEPTCHANGES的代碼,阻止dataadapter做它的事情。 也就是說,如果在數據表中添加/刪除/更新一行,執行ACCEPTCHANGES,然後執行DA.UPDATE(DT),則UPDATE方法將不會處理該行,因爲對於該行,「行」不變。 所以看起來真的,稱它爲本質上阻止到達數據庫的變化? http://msdn.microsoft.com/en-us/library/system.data.common.dataadapter.update(v=vs.110).aspx – flaZer 2014-12-30 00:47:01

+0

DataAdapter通常管理DataRow.RowState屬性。它使用DataRow.RowState來確定對該行採取的操作。如果給定行的RowState是DataRowState.Unchanged,則該行不會執行任何操作。 – 2014-12-30 03:14:17

0

有些人選擇操縱數據表中的數據,例如刪除某些行或將所有名稱掛在大寫字母上。刪除NULL的等等。

AcceptChanges只是將這些更改保存到數據表中。

如果要提交更改,需要使用dataadaptor或使用其他方法從數據表中的數據行獲取數據並提交更改。

+0

我的看法不同。你說過:''AcceptChanges'只是將這些更改保存到數據表中。'但這些更改實際上已保存到DataTable中。 AcceptChanges確實將當前的變化「標記」爲不再變化。就這樣。 – 2016-09-06 20:46:37

0

在我來說,它是由數據庫自動編號字段造成的,我建議如下 調用數據適配器的更新methof 呼叫更新 ///自動編號列 的數據表

調用acceptChanges然後再通過oledbadapter填充表格。如果你不需要自動編號字段,不要將其作爲參數添加到oledbadapter的deletecommand中

0

好的 - 如果我有這個權限,顯式調用DT.CommitChanges()會將所有行設置爲UNCHANGED。如果是這樣,當調用DA.UPDATE(DT)時,對數據表所做的任何更改都將被忽略。

因此,您應該只針對那些您不想訪問數據庫的更改調用DT.CommitChanges()。

因此,無論是否使用CommitChanges調用,都要將其更改爲.NET數據表,但要更改數據庫表,請不要在執行DA.Update之前調用CommitChanges。當然,這意味着必須調用DA.Update實際上將更改推送到數據庫...