zoukankan      html  css  js  c++  java
  • DataTable.Rows.Remove(row) 与 DataTable.Rows[i].Delete()区别

    今天在做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返回数据集,本地做离线编辑就是用这方式,最后再一次性提交数据库,哈,我那同事确实牛!

  • 相关阅读:
    hdu 2196 树形dp
    codeforces 1A
    [日常摸鱼]bzoj1218[HNOI2003]激光炸弹-二维前缀
    [日常摸鱼]bzoj2724蒲公英-分块
    [日常摸鱼]关于离散化
    [OI笔记]后缀自动机
    [日常摸鱼]poj1509Glass Beads-SAM
    [日常摸鱼]bzoj1083[SCOI2005]繁忙的都市-最小生成树
    [日常摸鱼]bzoj2038[2009国家集训队]小Z的袜子-莫队算法
    [日常摸鱼]三分法
  • 原文地址:https://www.cnblogs.com/pcmax/p/2328596.html
Copyright © 2011-2022 走看看