根据对记录的操作类型,生成相应的sql脚本,然后批量执行sql脚本。

解决方案 »

  1.   

    在项目中,经常会碰到,需要批量修改同条件下的数据
    1.可以通过适配器,DATASET的UPDATE方法来批量修改数据;
    这个方法比较常用,尤其是在一个支持多行同时进行编辑的情况下。
    2.循环记录集,逐条修改记录;
    这个方法,我比较少用,因为你修改本地记录集后,还是必须用方法1去update到后台,否则都在本地。
    3.每次删除旧的数据,然后插入新数据;
    如果数据时覆盖更新的,那么这是可以考虑的一种方法,但是我觉得delete+insert的效率应该不如直接update来得快?
    4.给每条记录一个状态,然后遍历记录集,判断状态为UPDATE,则修改当前记录,状态为ADD,则插入当前记录,为DELETE则删除当前记录,为NONE则不处理当前记录;
    似乎不需要去记录状态,每条DataRow都有一个RowState记录了。这种更新方式好像也比较少用。比较常见的是,通过GetChanges方法获取修改的那部分数据,部分更新到后台数据库。
      

  2.   

    如果是数据源绑定的是DataSet数据集,采用第一种方法无疑是最好的;不过如果数据源绑定的是List<T>呢?如果数据需要同时处理增加,删除,修改操作,我觉得第三种方法可能更实际
      

  3.   

    大数据量的情况下,delete再insert会比较慢
    我倾向于在程序里组织出update,insert各一组sql,再更新
    2000多条一组的话还是比较快的
      

  4.   

    我常用第一种.效率很高...
            public bool CommitUpdate(string sSQl, DataTable dt)
            {
                try
                {
                    if (_oleConn.State != ConnectionState.Open)
                        _oleConn.Open();
                    OleDbDataAdapter DA_QueryTele = new OleDbDataAdapter(sSQl, _oleConn);
                    OleDbCommandBuilder cmd = new OleDbCommandBuilder(DA_QueryTele);                DA_QueryTele.Update(dt);
                    dt.AcceptChanges();
                    return true;
                }
                catch (Exception err)
                {
                    throw new Exception("数据更新提交失败. 失败原因: " + err.Message);
                }
            }
      

  5.   

    一般用1.原因很简单,执行性能好,而且mssql下单句update语句默认是一个事务,所以数据安全性上也有保障。
    2.性能不好;
    3.没必要,实际上update语句就包含了delete+insert操作了。
    4.有无必要这样设计?那样的话表里其实很多无用数据,如果很庞大的表比如2,3g,然后有聚集索引,每次更新都要重新排序,非常耗时间的。如果不需要保留旧数据就直接update。
      

  6.   

    这个问题太复杂,执行数据更新的代码(调用 ado.net 进行库操作的),

    发起数据更新请求的代码(UI部分)
    是否是隔离的(进程隔离, 机器隔离)?数据集中的表如何跟库中的表对应的, 是否有机制生成增删改语句?所用的ado.net 驱动和数据库产品是否支持真正的批量更新(数据跟服务器只发生一次交互).
      

  7.   

    数据集提交时可能需要同时处理增加,删除,修改的操作,直接UPDATE是满足不了要求的,1,3,4可以达到目的,但都有局限性,不知各位有没有高招可以应付的。。
      

  8.   

    http://www.cnblogs.com/Enoch/articles/1708580.html
      

  9.   

    第一种常用~
    我也用过把数据转为HTML,然后来处理的,那样效率提高千倍以上