前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >.net的DataTable.AcceptChanges解释

.net的DataTable.AcceptChanges解释

作者头像
提莫队长
发布2019-02-21 11:24:18
6810
发布2019-02-21 11:24:18
举报
文章被收录于专栏:刘晓杰刘晓杰

.net中用datatable更新数据库的方法之前已经讲过(http://blog.csdn.net/lxj1137800599/article/details/51900419)。但是我后来又看到网上说的要如下调用,就试了一下

代码语言:javascript
复制
ds.AcceptChanges();   
adapter.Update(ds,ds.Tables[0].TableName);

很奇怪,update失败了。为此,我查了资料。update其实是根据dataRow的RowState进行更新的,而AcceptChanges将RowState全部变成了unchanged。这样一来数据库就不知道对数据如何进行操作了。

在此有必要介绍一下rowstate进行介绍: RowState 是 DataRow 很重要的一个属性, 表示 DataRow 当前的状态. RowState 有 Added, Modified, Unchanged, Deleted, Detached 几种, 分别表示 DataRow 被添加, 修改, 无变化, 删除, 从表中脱离. 在调用一些方法或者进行某些操作之后, 这些状态可以相互转化.

DataAdapter 可以根据 RowState 来决定如何影响数据库等存储位置. 如果 DataRow 的状态为 Added, DataAdapter 将把 DataRow 添加到数据库等存储位置, 对于 Modified, Deleted 则将执行更新和删除操作. 其实, 最终的操作效果还是决定于 DataAdapter 的 SelectCommand, UpdateCommand 等 DbCommand. 如果, 在 UpdateCommand 中写入 Delete 语句或者执行有删除操作的存储过程, 那么状态为 Modified 的 DataRow 最终将在数据库中删除而不是更新

a. 状态为 Unchanged, Added, Modified 的 DataRow, 使用 DataRow.AcceptChanges 方法, 行状态将转化为 Unchanged. 以上三种状态的 DataRow, 其目的相当于添加或者修改数据, 因此接受变化后这些 DataRow 存在于 DataTable 中, 并且状态为 Unchanged. 如果这时使用 DataAdapter 更新, 将不会对数据库等存储位置有任何的影响, 因为状态已经为 Unchanged, 这本应该在 DataAdapter 更新后转化的.

b. 状态为 Deleted 的 DataRow, 使用 DataRow.AcceptChanges 方法, 行状态转化为 Detached. 目的为删除数据的 DataRow, 接受变化后就从 DataTable 中脱离, 因此状态变为 Detached.

c. 状态为 Detached 的 DataRow, 不能使用 DataRow.AcceptChanges 方法.

更多的介绍在这里:http://blog.csdn.net/sz101/article/details/5837950

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016年07月15日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档