惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Apple Machine Learning Research
Apple Machine Learning Research
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
G
Google Developers Blog
博客园 - 司徒正美
J
Java Code Geeks
aimingoo的专栏
aimingoo的专栏
A
About on SuperTechFans
博客园 - 三生石上(FineUI控件)
WordPress大学
WordPress大学
T
The Blog of Author Tim Ferriss
D
Docker
大猫的无限游戏
大猫的无限游戏
D
DataBreaches.Net
腾讯CDC
V
Visual Studio Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
C
Check Point Blog
M
MIT News - Artificial intelligence
Jina AI
Jina AI
I
InfoQ
雷峰网
雷峰网
The Cloudflare Blog
美团技术团队
Engineering at Meta
Engineering at Meta

博客园 - 阿修

Entity FrameWork 单表对多实体 让Entity Framework启动不再效验__MigrationHistory表 Entity Framework搜索指定字段解决方案 Linux+Mono+WebService:CS1703: An assembly with the same identity--mscorlib 获取某年中第几个礼拜的第一天的函数 [转摘]Lucene学习总结之一:全文检索的基本原理 Lucene.net根据Sort走到了不同的类处理 VPN Connections and Default Gateways - 阿修 牛!帮EXE等执行文件压缩的工具 进程通讯的多种方式 三星I9008删除程序清单 .NET编程中的部分效率问题 质量保证漫漫谈之QA、QC、QM的关系与区别 敏捷宣言 多维角度聊聊结对编程 在Windows下编译和.NET运行MemCached Serv-U服务器中文乱码问题的解决 请小心 管理学中四件不要做的事情
DataTable.Rows.Remove(row) 与 DataTable.Rows[i].Delete()区别
阿修 · 2012-01-21 · via 博客园 - 阿修

今天在做ADO.NET中的adapter进行数据自动触发更新数据库功能,发现一个很奇怪的问题,原来数据操作都是自己代码去完成更新,从来没有涉及到这种方式,所以一时晕菜了。

 1 SQLiteDataAdapter dataAdpater = new SQLiteDataAdapter("Select cid,sd from VC", conn);
2 dataAdpater.DeleteCommand = new SQLiteCommand("delete From VC Where cid = @cid", conn);
3 dataAdpater.DeleteCommand.Parameters.Add("@cid", DbType.Int32, 4, "cid");
4 dataAdpater.DeleteCommand.Parameters["@cid"].SourceVersion = DataRowVersion.Original;
5
6 DataTable categoryTable = new DataTable();
7 dataAdpater.Fill(categoryTable);
8 categoryTable.PrimaryKey = new DataColumn[]{categoryTable.Columns["cid"]};
9
10 DataRow dr = categoryTable.Rows.Find(213213);
11 categoryTable.Rows.Remove(dr);
12 dataAdpater.Update(categoryTable);

执行以上代码,发现实体数据库并未删除,很奇怪,到最后一句debug时对应的213213记录已经确实不存在,为什么数据库一直没有删除,很困惑,后来查询MSDN里面发现DataRow有个Delete函数,马上试试,果然成功删除。

1 DataRow dr = categoryTable.Rows.Find(213213);
2 dr.Delete();
3 dataAdpater.Update(categoryTable);

查询MSDN解释如下:

DataTable.Rows.Remove(row) :Calling Remove is the same as calling Delete and then calling AcceptChanges.

DataTable.Rows[i].Delete():A deleted row can be undeleted by invoking RejectChanges.

这样意思就很清楚,DataTable里面所有记录集都有自己的一个修改标志,证明每条记录是add,delete还是modify的,所有adpater.Update时候就会调用不同的cmd就最终同步是数据,早十年前我同事就用XML返回数据集,本地做离线编辑就是用这方式,最后再一次性提交数据库,哈,我那同事确实牛!