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语句 ...
随机推荐
- 从一个简单例子来理解js引用类型指针的工作方式
<script> var a = {n:1}; var b = a; a.x = a = {n:2}; console.log(a.x);// --> undefined conso ...
- Fluxion 实战答疑
实战文章<实战-Fluxion与wifi热点伪造.钓鱼.中间人攻击.wifi破解>发布之后,大家响应热烈,不过也遇到了很多问题.微信后台被各种提问挤爆了,于是抓紧时间出了这篇答疑. 0x0 ...
- [.net 面向对象程序设计进阶] (4) 正则表达式 (三) 表达式助手
[.net 面向对象程序设计进阶] (2) 正则表达式(三) 表达式助手 上面两节对正则表达式的使用及.NET下使用正则表达式作了详细说明,本节主要搜集整理了常用的正则表达式提供参考. 此外为了使用方 ...
- 【译】用jQuery 处理XML-- DOM(文本对象模型)简介
用jQuery 处理XML--写在前面的话 用jQuery 处理XML-- DOM(文本对象模型)简介 用jQuery 处理XML--浏览器中的XML与JavaScript 用jQuery 处理XML ...
- 【重要更新】Senparc.Weixin SDK v4.4 升级说明
本次更新同时影响以下所有Senparc.Weixin相关版本的dll: Senparc.Weixin.dll 升级到 v4.4.2(重要) Senparc.Weixin.MP.dll 升级到 v13. ...
- zk系列-zookeeper的使用
zk支持java/c访问,java常用的有apache-zkclient.社区版的i0tec-zkclient.github.adyliu,apache-zkclient是zk自身提供的接口,i0te ...
- redis系列-redis的连接
Redis 是完全开源免费的,遵守BSD协议,先进的key - value持久化产品.它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list ...
- Android Activity的生命周期简单总结
Android Activity的生命周期简单总结 这里的内容参考官方的文档,这篇文章的目的不是去总结Activity是如何启动,如何创造,以及暂停和销毁的,而是从实际开发中分析在Activity各个 ...
- Js~动态判断PC和手机浏览器
这个只是一个小知识,也是在网上找的,挺好用! 动态判断浏览器是PC还是移动端! <script> var browser={ versions:function(){ var u = na ...
- Java学习之路:不走弯路,就是捷径
1.如何学习程序设计? JAVA是一种平台,也是一种程序设计语言,如何学好程序设计不仅仅适用于JAVA,对C++等其他程序设计语言也一样管用.有编程高手认为,JAVA也好C也好没什么分别,拿来就用.为 ...