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语句 ...
随机推荐
- Java多线程系列--“JUC锁”06之 Condition条件
概要 前面对JUC包中的锁的原理进行了介绍,本章会JUC中对与锁经常配合使用的Condition进行介绍,内容包括:Condition介绍Condition函数列表Condition示例转载请注明出处 ...
- [转]在cocos2d-x中让一个项目适配iphone、iphone retina、ipad、ipad retina四种分辨率
http://cankeyyin.blog.163.com/blog/static/12336178320124149391202/ 原理:将iphone的hd图片给ipad用,即: 使用原iphon ...
- java中基本类型和包装类型实践经验
至今,小菜用java快两年了,有些事,也该有个总结. 基本类型和包装类型的概念在本文不作赘述. 如果这两种类型直接使用,倒没什么值得讨论的,无非就是自动装箱拆箱,java可以让你感觉不到他们的存在,但 ...
- 据说每个大牛、小牛都应该有自己的库——DOM处理续
在上篇据说每个大牛.小牛都应该有自己的库——DOM处理最后剩下attr()和css()方法没有处理,因为这两个方法当时并不自计划中,是写着写着突然想到的,一时间没有特别好的思路,当时已十一点多了,就去 ...
- How to install java and eclipse on linux
First of all, download from the website of java. I download 'jdk-8u102-linux-i586.tar.gz' unzip it t ...
- cxf restful
Restful 服务端 1 创建好pojo.dao.service, dao进行数据库操作,service提供服务 @Path("/roomservice") @Produces( ...
- 这里有个坑---[NotMapped]不要忘了加
这里有个坑,我们定义实体的时候如果使用了在数据库没有的字段记得加[NotMapped]---------每一个遇到的坑总结后都是一比财富. 在项目中我们一般会使用EF等ORM框架来为我们服务,在ORM ...
- EF架构~linq to entity的随机排序问题
回到目录 对于从linq to sql迁移过来的开发者,对随机排序不会感到陌生,直接为datacontext添加一个方法再配合反射就可以实现随机排序了,代码如下: /// <summary> ...
- JSONP浅析
DEMO : JSONP示例 为什么使用JSONP JSONP和JSON是不一样的.JSON(JavaScript Object Notation)是一种基于文本的数据交换方式,或者叫做数据描述格式. ...
- getattribute()与getparameter()的区别
1.它们取到的值不同.getAttribute取到的是对象(object),而getParameter取到的是String. 2.数据传递路劲不同.request.getParameter方法传递的数 ...