SqlCommandBuilder实现大数据更新
/// <param name="table">准备更新的DataTable新数据</param> /// <param name="TableName">对应要更新的数据库表名</param> /// <param name="primaryKeyName">对应要更新的数据库表的主键名</param> /// <param name="columnsName">对应要更新的列的列名集合</param> /// <param name="limitColumns">需要在SQL的WHERE条件中限定的条件字符串,可为空。</param> /// <param name="onceUpdateNumber">每次往返处理的行数</param> /// <returns>返回更新的行数</returns> public static int Update(DataTable table, string TableName, string primaryKeyName, string[] columnsName, int onceUpdateNumber) { ; ; ) ; //DataSet ds = new DataSet(); // 如何把已经属于一个DataSet的DataTable加到另一个DataSet中解决方法 //对需要添加的datatabele进行复制后再添加。 //DataTable tableNew = new DataTable(); //tableNew = table.Copy(); //ds.Tables.Add(table); ; using (SqlConnection sqlconn = new SqlConnection(ConnectionString)) { sqlconn.Open(); //使用加强读写锁事务 //SqlTransaction tran = sqlconn.BeginTransaction(IsolationLevel.ReadCommitted); try { foreach (DataRow dr in table.Rows) { //所有行设为修改状态 dr.SetModified(); } //为Adapter定位目标表 SqlCommand cmd = new SqlCommand(string.Format("select Name,Pwd from {0}", TableName), sqlconn); SqlDataAdapter da = new SqlDataAdapter(cmd); SqlCommandBuilder sqlCmdBuilder = new SqlCommandBuilder(da); da.AcceptChangesDuringUpdate = false; string columnsUpdateSql = ""; //SqlParameter[] paras = new SqlParameter[columnsName.Length]; ////需要更新的列设置参数是,参数名为"@+列名" //for (int i = 0; i < columnsName.Length; i++) //{ // //此处拼接要更新的列名及其参数值 // columnsUpdateSql += ("[" + columnsName[i] + "]" + "=@" + columnsName[i] + ","); // paras[i] = new SqlParameter("@" + columnsName[i], columnsName[i]); //} //if (!string.IsNullOrEmpty(columnsUpdateSql)) //{ // //此处去掉拼接处最后一个"," // columnsUpdateSql = columnsUpdateSql.Remove(columnsUpdateSql.Length - 1); //} //此处生成where条件语句 string limitSql = ("[" + primaryKeyName + "]" + "=@" + primaryKeyName); string sql = "Update T_SQLTable SET Name=@Name,Pwd=@Pwd where ID=@ID"; SqlCommand updateCmd = new SqlCommand(sql); //不修改源DataTable updateCmd.UpdatedRowSource = UpdateRowSource.None; da.UpdateCommand = updateCmd; da.UpdateCommand.Parameters.Add(,"Name"); da.UpdateCommand.Parameters.Add(,"Pwd"); da.UpdateCommand.Parameters.Add(, "ID"); //da.UpdateCommand.Parameters.AddWithValue("@" + primaryKeyName, primaryKeyName); //每次往返处理的行数 da.UpdateBatchSize = onceUpdateNumber; result = da.Update(table); table.AcceptChanges(); //tran.Commit(); } catch { //tran.Rollback(); } finally { sqlconn.Dispose(); sqlconn.Close(); } } return result; }
调用:
DAL.DBHelper db=new DAL.DBHelper(); DataTable Oletable= db.GetDataTable("select * from T_SQLDB"); DAL.DBHelper.Update(Oletable, );
SqlCommandBuilder实现大数据更新的更多相关文章
- 使用RedisTemplate进行Redis存取的工具类设计
通常在访问量大数据更新频率不高的系统中会使用第三方的缓存组件来降低数据库服务的负载,鉴于模块独立分工独立的考虑,针对缓存组件操作的工作全部应该统一接口对其他业务提供服务,这样业务操作只需要关注业务实现 ...
- LVM快照(snapshot)备份
转载自:http://wenku.baidu.com/link?url=cbioiMKsfrxlzrJmoUMaztbrTelkE0FQ8F9qUHX7sa9va-BkkL4amvzCCAKg2hBv ...
- LVM快照备份与恢复
简介 最近在做数据备份方面的工作,用到两个工具,一个是dd,而另一个是lvm的快照(snapshot).由于数据比较大,直接是用dd非常耗时,而lvm的快照可以在几秒内轻松搞定,而且可以达到实时的 ...
- 存储总量达20T的MySQL实例,如何完成迁移?
版权声明:本文由王亮原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/122 来源:腾云阁 https://www.qclou ...
- LVM(Logical Volume Manager)逻辑卷管理
本文实验部分,完全由本人亲自动手实践得来 文章中有部分的内容是我个人通过实验测试出来的,虽以目前本人的能力还没发现不通之处,但错误难免,所以若各位朋友发现什么错误,或有疑惑.更好的建议等,盼请各位能在 ...
- 一万字详解 Redis Cluster Gossip 协议
Redis Cluster Gossip 协议 大家好,我是历小冰,今天来讲一下 Reids Cluster 的 Gossip 协议和集群操作,文章的思维导图如下所示. 集群模式和 Gossip 简介 ...
- 《JAVA语言程序设计》上课笔记
教学目标:1.使学生了解JAVA课程的性质.定位.作用:为什么要学习JAVA?让学生知道如何学好JAVA: 教学内容: 一. 问几个问题 1. 你们到这里来干什么 ...
- cmds系统数据库源端大表数据更新优化
cmds系统数据库源端大表数据更新优化 以下脚本可以用于将表按照rowid范围分区,获得指定数目的rowid Extent区间(Group sets of rows in the table into ...
- SqlDataAdapter.Update批量数据更新
SqlDataAdapter.Update批量数据更新 使用SqlDataAdapter.Update可以方便地对数据库进行快速.批量数据更新.我们最常用的多条数据更新方法是使用循环多次执行SQL语句 ...
随机推荐
- 分布式系统一致性问题和Raft一致性算法
一致性问题 一致性算法是用来解决一致性问题的,那么什么是一致性问题呢? 在分布式系统中,一致性问题(consensus problem)是指对于一组服务器,给定一组操作,我们需要一个协议使得最后它们的 ...
- ENode 2.0 - 介绍一下关于ENode中对Command的调度设计
CQRS架构,C端的职责是处理从上层发送过来的command.对于单台机器来说,我们如何尽快的处理command呢?本文想通过不断提问和回答的方式,把我的思考写出来. 首先,我们最容易想到的是使用多线 ...
- 作业七:团队项目——Alpha版本冲刺阶段-07
昨天进展:代码编写. 今天安排:代码编写.
- 有shi以来最详细的正则表达式入门教程
本篇文章文字内容较多,但是要学习正则就必须耐心读下去,正则表达式是正则表达式其实并没有想像中的那么困难,但是想要熟练的掌握它,还是需要下功夫勤加练习的.这里讲一些正则表达式的语法和学习方法,大家还要多 ...
- [ZigBee] 3、ZigBee基础实验——GPIO输出控制实验-控制Led亮灭
1.CC2530的IO口概述 CC2530芯片有21 个数字输入/输出引脚,可以配置为通用数字I/O 或外设I/O 信号,配置为连接到ADC.定时器或USART外设.这些I/O 口的用途可以通过一系列 ...
- 浅析SQL Server实现分布式事务的两阶段提交协议2PC
不久之前团队有个新人问我一个很重要的web服务接口如何保证事务的问题.因为涉及到跨库事务,当时我只是回答目前我们的SOA框架都不支持跨库事务.然后就问到了数据库跨库事务是如何实现的,我只能凭印象含糊回 ...
- AngularJS快速入门指南20:快速参考
thead>tr>th, table.reference>tbody>tr>th, table.reference>tfoot>tr>th, table ...
- java.rmi.NoSuchObjectException: no such object in table
jmx链接的时候,最简单的例子都行不通,郁闷,出现了: 参考:http://reiz6153.blog.163.com/blog/static/401089152009442723208/ 代码: M ...
- Redis中5种数据结构的使用场景介绍
转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/108.html?1455861435 一.redis 数据结构使用场景 原 ...
- 关于STM32的外部引脚中断的问题
今天想用自己以前的比较干净的工程模板做一个东西,,,,,,,在添加上引脚中断的时候,,突然想知道自己配置的中断优先级是否正确执行,,,,, 以前刚学习32的时候测试过是可以的,,不过今天发现了一个大问 ...