散分了,ado.net讨论关于批量修改数据提交的合理解决方案
在项目中,经常会碰到,需要批量修改同条件下的数据1.可以通过适配器,DATASET的UPDATE方法来批量修改数据;
2.循环记录集,逐条修改记录;
3.每次删除旧的数据,然后插入新数据;
4.给每条记录一个状态,然后遍历记录集,判断状态为UPDATE,则修改当前记录,状态为ADD,则插入当前记录,为DELETE则删除当前记录,为NONE则不处理当前记录;
如果您在项目中使用了哪个方案,或者有更好的解决方案,都来评论一下,希望能分享一下各自的经验!互相学习了。散分 --------------------编程问答-------------------- 根据对记录的操作类型,生成相应的sql脚本,然后批量执行sql脚本。 --------------------编程问答-------------------- 1与2。 --------------------编程问答-------------------- 如果批量修改的数据里面需要增加一部分新记录,修改一部分旧记录,删除一部分旧记录;
第二种方案是办不到的,只有用1、3、4了,都来讨论下啊 --------------------编程问答-------------------- 自己顶一下!!! --------------------编程问答-------------------- 第一种吧. --------------------编程问答-------------------- 如果需要修改的数据有其他数据与之关联,就用4
否则的话3最省心 --------------------编程问答-------------------- 一般第三个方法! --------------------编程问答-------------------- 在项目中,经常会碰到,需要批量修改同条件下的数据
1.可以通过适配器,DATASET的UPDATE方法来批量修改数据;
这个方法比较常用,尤其是在一个支持多行同时进行编辑的情况下。
2.循环记录集,逐条修改记录;
这个方法,我比较少用,因为你修改本地记录集后,还是必须用方法1去update到后台,否则都在本地。
3.每次删除旧的数据,然后插入新数据;
如果数据时覆盖更新的,那么这是可以考虑的一种方法,但是我觉得delete+insert的效率应该不如直接update来得快?
4.给每条记录一个状态,然后遍历记录集,判断状态为UPDATE,则修改当前记录,状态为ADD,则插入当前记录,为DELETE则删除当前记录,为NONE则不处理当前记录;
似乎不需要去记录状态,每条DataRow都有一个RowState记录了。这种更新方式好像也比较少用。
比较常见的是,通过GetChanges方法获取修改的那部分数据,部分更新到后台数据库。
--------------------编程问答-------------------- 前三种方法都用过,有的时候,感觉还是看个人习惯。。 --------------------编程问答-------------------- 如果是数据源绑定的是DataSet数据集,采用第一种方法无疑是最好的;不过如果数据源绑定的是List<T>呢?如果数据需要同时处理增加,删除,修改操作,我觉得第三种方法可能更实际 --------------------编程问答-------------------- 我顶起 --------------------编程问答-------------------- 很少用到了
一般都是线下操作,然后导入了
--------------------编程问答-------------------- 感觉第三种工作量稍微大点,个人感觉哈 --------------------编程问答-------------------- 学习~~ --------------------编程问答-------------------- 大数据量的情况下,delete再insert会比较慢
我倾向于在程序里组织出update,insert各一组sql,再更新
2000多条一组的话还是比较快的 --------------------编程问答-------------------- 学习、 --------------------编程问答-------------------- 1,2 --------------------编程问答-------------------- 我常用第一种.效率很高...
--------------------编程问答-------------------- 第一种比较常用吧,楼主的后几种我比较少用 --------------------编程问答-------------------- 一般用1.原因很简单,执行性能好,而且mssql下单句update语句默认是一个事务,所以数据安全性上也有保障。
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);
}
}
2.性能不好;
3.没必要,实际上update语句就包含了delete+insert操作了。
4.有无必要这样设计?那样的话表里其实很多无用数据,如果很庞大的表比如2,3g,然后有聚集索引,每次更新都要重新排序,非常耗时间的。如果不需要保留旧数据就直接update。 --------------------编程问答-------------------- 我顶起 --------------------编程问答-------------------- --------------------编程问答-------------------- 这个问题太复杂,
执行数据更新的代码(调用 ado.net 进行库操作的),
跟
发起数据更新请求的代码(UI部分)
是否是隔离的(进程隔离, 机器隔离)?
数据集中的表如何跟库中的表对应的, 是否有机制生成增删改语句?
所用的ado.net 驱动和数据库产品是否支持真正的批量更新(数据跟服务器只发生一次交互).
--------------------编程问答-------------------- 数据集提交时可能需要同时处理增加,删除,修改的操作,直接UPDATE是满足不了要求的,1,3,4可以达到目的,但都有局限性,不知各位有没有高招可以应付的。。 --------------------编程问答-------------------- --------------------编程问答-------------------- 学习!!~ --------------------编程问答-------------------- 要看批量的数据有多少(1万还是100万),修改了多少(几十条还是几万条),这些修改的数据彼此间是否有关系(是否必须在一个事务里) --------------------编程问答--------------------
这里指的都是在同一事务中,如果不是同一事务,只有分开处理这个办法了 --------------------编程问答-------------------- 我顶起 --------------------编程问答-------------------- 我会用第四种方法. --------------------编程问答-------------------- 第一种 --------------------编程问答-------------------- 第一种 --------------------编程问答-------------------- 批量Update --------------------编程问答-------------------- 学习了,谢谢 --------------------编程问答-------------------- 1吧~~~~~~~~~~~~~!! --------------------编程问答-------------------- 我学习 我顶起 我接分 --------------------编程问答-------------------- http://www.cnblogs.com/Enoch/articles/1708580.html --------------------编程问答-------------------- 第一种常用~
我也用过把数据转为HTML,然后来处理的,那样效率提高千倍以上 --------------------编程问答-------------------- 用事务去处理
--------------------编程问答-------------------- 支持 8 楼..........
补充:.NET技术 , C#