DataTable的AcceptChange方法为什么不能在Update之前?
本人轉載http://www.cnblogs.com/telnet_mike/archive/2011/08/29/2159013.html
總結:DataTable.AcceptChanges相當于將DataTable表中的所有DataRow的RowState狀態?重置為Unchanged
?DataTable.RejectChanges方法:回滾自該表加載以來或者上次調用AcceptChanges以來對該表進行的所有更改;并且DataTable表中的所有DataRow的RowState狀態?重置為Unchanged
例子:
?DataTable dataTable = ds.Tables[0];
?dataTable.Rows[0][0] = 96.6669;//此時的RowState為Modied
?dataTable.AcceptChanges();//此時的RowState為Unchanged
?dataTable.Rows[0][0] = 7777;此時的RowState為Modied此時的RowState為Modied
?dataTable.RejectChanges();//此時的dataTable.Rows[0][0] 為96.6669,RowState為Unchanged
?
//最后?Update需要注意的是;防止并發性的操作。有在Update執行之前所包含的數據行有被修改,則會發生并發性操作錯誤。
da.Update(dataTable);
解決并發性辦法:
?if (dataTable.GetChanges() != null)
??{
???????da.Update(dataTable.GetChanges());
??}?
?
?
AcceptChanges方法會將所有改動保存到DataSet或DataTable中,使得所有行的狀態都是Unchanged(沒有被更改狀態)
而DataAdapter.Update方法在保存數據到數據庫表時做過一個檢查,即檢查表行是否被修改過,如果沒被修改過,那么更需將不會執行任何命令,直接跳過本行,開始檢查下一行,如此,一個表如果行都是Unchanged狀態,那么它就不會被更新到數據庫中。
所以,在更改了DataSet或DataTable后,若想調用DataAdapter.Update方法直接更新數據到數據庫,那么你只需要這個Update方法,無需在此前調用一次AcceptChanges方法了。
?
?
?
Added
該行已添加到 DataRowCollection 中,AcceptChanges尚未調用。?
Deleted
該行已通過 DataRow 的 Delete 方法被刪除。
Detached
該行已被創建,但不屬于任何 DataRowCollection。DataRow 在以下情況下立即處于此狀態:創建之后添加到集合中之前;或從集合中移除之后。?
Modified
該行已被修改,AcceptChanges 尚未調用。
Unchanged
該行自上次調用 AcceptChanges 以來尚未更改。?
?
?
DataTable.AcceptChanges方法:提交自上次調用AcceptChanges以來對該表進行的所有更改。
調用AcceptChanges時,任何仍處于編輯模式的DataRow對象將成功結束其編輯。DataRowState也發生更改:所有Added和Modified行成為Unchanged;Deleted行被移除。
在您嘗試使用DbDataAdapter.Update方法更新DataSet之后,通常會對DataTable調用AcceptChanges方法。
?
?
DataTable.RejectChanges方法:回滾自該表加載以來或上次調用AcceptChanges以來對該表進行的所有更改。
調用RejectChanges時,任何仍處于編輯模式的DataRow對象將取消其編輯。新行被移除。DataRowState設置為Modified或Deleted的行返回到其初始狀態。
會出現對DataTable進行多次更改,但是通過調用RejectChanges方法拒絕這些更改的現象
?
?
DataRow.BeginEdit方法:對DataRow對象開始編輯操作。
使用BeginEdit方法將DataRow置于編輯模式。在此模式中,事件被臨時掛起,以便允許用戶在不觸發驗證規則的情況下對多行進行多處更改。例如,如果需要確保總數列的值等于某行中借貸列的值,則可以將每一行都置入編輯模式,以便在用戶嘗試提交值之前掛起對行值的驗證。
BeginEdit方法在用戶更改數據綁定控件的值時被隱式調用;EndEdit方法在您調用DataTable對象的 AcceptChanges方法時被隱式調用。
?
出自:http://blog.csdn.net/td13560142839/article/details/7468406
?
?
?
?
總結
以上是生活随笔為你收集整理的DataTable的AcceptChange方法为什么不能在Update之前?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: django项目实战(2)-数据库配置
- 下一篇: mysql中explain的用法