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之前?相关推荐
- C# DataTable的Select()方法不支持 != 判断
异常描述: 用户代码未处理 System.Data.SyntaxErrorException HResult=-2146232032 Message=无法解释位置 23 的标记"!" ...
- DataTable的Merge方法和添加datatable到dataset
DataTable的Merge方法 Merge方法是将两个结构相似的datatable合并成一个datatable: 实例代码: //create table1 ...
- [datatable]关于在DataTable中执行DataTable.Select(“条件“)返回DataTable的解决方法
[datatable]关于在DataTable中执行DataTable.Select("条件")返回DataTable的解决方法 参考文章: (1)[datatable]关于在Da ...
- 关于在DataTable中执行DataTable.Select(条件)返回DataTable的解决方法
在实际编程工程中,常常遇到这样的情况:DataTable并不是数据库中的,或者DataTable尚未写到数据库,或者从数据库中读出的DataTable已经在本地被改动,又没有写回数据库(可能还要作其他 ...
- DataTable添加行的方法
方法一: DataTable tblDatas = new DataTable("Datas"); DataColumn dc = null; dc = tblDatas.Col ...
- webform计算某几列结果_利用DataTable.Compute等方法和属性做各种统计(某一列的总和sum、不重复的某列记录数distinct)...
对应sql语句 select UserID, UserName, UserMoney from Users 从数据库里利用SqlDataAdapter读取出DataSet的方法不写了,这个好简单,写统 ...
- 【hibernate merge】session1.merge(T entity)方法的含义和update方法的区别
注意: MERGE语句是SQL语句的一种.在SQL Server.Oracle数据库中可用,MySQL.PostgreSQL中不可用. 1>session1.merge(T entity) 合 ...
- DataTable数据过滤方法
转自:https://blog.csdn.net/u011981242/article/details/52419460 筛选DataTable中的数据,使用 Select()方法,筛选结果可以保存到 ...
- c# datatable数据合并方法
合并方法1:用Rows.Add方法 DataTable1.Rows[i].ItemArray.CopyTo(obj, 0);newDataTable.Rows.Add(obj); 合并方法2:用Dat ...
最新文章
- 如何系统的学习单片机?
- 阿里员工吐槽:后悔接这侮辱性的offer
- 这两天用到的Jmeter录制
- BroadcastReceiver的思考(3)
- int 为什么是2147483647_2147483647代表什么
- WPF基础知识学习笔记(一)XAML基础
- linux中nodejs后台运行工具forever
- 说说我在项目中为什么不用实体框架,如果说我在诋毁你所爱的EF,请进来.
- c语言 socket 断开自动连接,如何优雅地断开TCP连接?
- vscode svn插件使用_我最终还是选择了VS code!
- shell 脚本空行造成 :not found make.sh:
- java编译不报错但运行啥都没_java编译时与运行时概念与实例详解
- Spring的Bean属性依赖注入
- PowerDesigner导出SQL脚本运行注释出现乱码问题
- RPi 2B Raspbian system install
- mysql查询更新删除_mysql查询,更新(text类型),删除关联操作
- 由梵歌企划策划承办的方正科技总裁签售会(武汉站)圆满结束!
- 深入分析AIDL原理
- 思维方式-《策略思维》书中的精髓:生活工作中博弈无处不在,理解博弈论、善用策略思维,能帮助我们做出更好的决策。
- 组合优化问题MATLAB程序,组合优化问题(一).ppt
热门文章
- thymeleaf+layui加载页面渲染时,TemplateProcessingException: Could not parse as expression:
- python课堂笔记手抄图片_超简单又漂亮的手抄报图片
- matlab神经模糊推理系统
- 【新星计划】Matlab实现数据导出
- fluent计算进出口的流量差
- linux 手动解压or增加or更新 jar 包中文件
- c语言指数pow,C语言中的指数函数pow()问题
- 显示部分x_Linux 黑话解释:什么是显示服务器,用来做什么? | Linux 中国
- UML建模--序列图建模技巧
- NumberUtils源码分析