DataTable的AcceptChange方法为什么不能在Update之前?
来源:互联网 发布:因windows system32 编辑:程序博客网 时间:2024/05/22 15:23
本人转载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方法时被隐式调用。
- DataTable的AcceptChange方法为什么不能在Update之前?
- 关于AcceptChange方法和Update更新数据库问题
- 为什么我的datawindow不能update?
- 为什么在pl/sql中,for update 不能更新表
- 为什么requestWindowFeature()方法要在setContentView()方法之前调用?
- C#中关于SqlDataAdapter的Update(dataTable)方法
- DbDataAdapter 的Fill(DataTable dataTable) 和 Update(DataSet dataSet);方法的使用
- DbDataAdapter.Update 方法 与 DataTable.AcceptChanges 方法
- 为什么header之前不能有输出
- MainActivity中为什么不能在自己创建的线程中调用控件的方法?
- java静态方法的重写,为什么不能?
- 抽象方法为什么不能是静态的
- 为什么对象不能调用Object的方法?
- 为什么java中在Thread的run方法中不能throws
- 在Dorado未支持Datatable中自动换行功能之前的解决办法
- 为什么部分IO流在调用Close()方法之前要先调用flush()方法
- 在static方法中为什么不能使用this引用
- java——static为什么不能定义在方法里
- wampserver环境下配置虚拟域名
- unity商店demo学习:跑酷游戏
- Python写UTF-8字符到MySQL,会偶尔报无法解码'\xxx\xxx'类错误
- Mac安装MySQL
- ubuntu学习--安装问题(依赖项版本低)
- DataTable的AcceptChange方法为什么不能在Update之前?
- 如何用几何画板制作立体阴影效果文字
- Java基础之List--常用集合
- 15.8节练习
- UIAutomation使用简要介绍
- springMVC3学习(七)--Interceptor拦截器
- adb 端口被劫持
- Ryan的OC学习总结-----4 类别与扩展
- [MDM-1] - About Mobile Device Management - Yingyong Mao