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语句 ...
随机推荐
- static关键字作用总结
之前讲到final关键字的作用是每次面试的时候我必问求职者的两个问题之一,另外一个问题就是文本会写到的static.final和static一样,都是一个小问题可以看到一个人的基础是否扎实以及平时是否 ...
- 作业三:代码规范、代码复审、PSP
一.代码规范 我认为我们编写的代码都需要进行规范的操作,因为如果为了图省事情或者为了减少时间去完成这个编程.在最后检验的时候就会出现一些警告,导致你这次编程的代码出现问题,当出现问题的时候你在回头去检 ...
- 【吉光片羽】js横向滚动与浮动导航
1.横向滚动,这个方法是见过最简洁的了. #demo { background: #FFF; overflow: hidden; border: 1px dashed #CCC; width: 117 ...
- Guava - EventBus(事件总线)
Guava在guava-libraries中为我们提供了事件总线EventBus库,它是事件发布订阅模式的实现,让我们能在领域驱动设计(DDD)中以事件的弱引用本质对我们的模块和领域边界很好的解耦设计 ...
- silverlighter下MVVM模式中利用Behavior和TargetedTriggerAction实现文本框的一些特效
在silverlight一般开发模式中,给文本框添加一些事件是轻而易举的,然而MVVM开发模式中,想要给文本框添加一些事件并非那么容易,因为MVVM模式中,只有ICommand接口,而且也只有Butt ...
- java输出任意两个日期之间有多少天
package JingDian; import java.text.ParseException; import java.text.SimpleDateFormat; import java.ut ...
- 虚拟化平台cloudstack(2)——安装(上)
vmware workstation安装ubuntu server12.04 这个其实没什么说的了,下软件,安装,一顿下一步,OK. 安装完成后,为ubuntu server 12.04安装桌面. 使 ...
- 一个线上运营着3000+人的游戏,因为我不小心一个DROP DATABASE,全没了。 怎么办??跟我HOLD住!!!
前言 今天下午3点,我按照惯例,打开游戏服务器,开新服部署嘛,游戏在腾讯开放平台,简单.闭着眼睛都OK.于是一轮子的复制黏贴拷贝,把服务器加起来,然后启动查看日志. ....突然发现不断的有Excep ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(六):了解MessageHandler
上一篇<Senparc.Weixin.MP SDK 微信公众平台开发教程(五):使用Senparc.Weixin.MP SDK>我们讲述了如何使用Senparc.Weixin.MP SDK ...
- JavaBean和Map转换封装类
package com.ljq.util; import java.beans.BeanInfo; import java.beans.Introspector; import java.beans. ...