1. /// <param name="table">准备更新的DataTable新数据</param>
  2. /// <param name="TableName">对应要更新的数据库表名</param>
  3. /// <param name="primaryKeyName">对应要更新的数据库表的主键名</param>
  4. /// <param name="columnsName">对应要更新的列的列名集合</param>
  5. /// <param name="limitColumns">需要在SQL的WHERE条件中限定的条件字符串,可为空。</param>
  6. /// <param name="onceUpdateNumber">每次往返处理的行数</param>
  7. /// <returns>返回更新的行数</returns>
  8. public static int Update(DataTable table, string TableName, string primaryKeyName, string[] columnsName, int onceUpdateNumber)
  9. {
  10. ;
  11. ;
  12. ) ;
  13.  
  14. //DataSet ds = new DataSet();
  15. // 如何把已经属于一个DataSet的DataTable加到另一个DataSet中解决方法
  16. //对需要添加的datatabele进行复制后再添加。
  17. //DataTable tableNew = new DataTable();
  18. //tableNew = table.Copy();
  19. //ds.Tables.Add(table);
  20.  
  21. ;
  22. using (SqlConnection sqlconn = new SqlConnection(ConnectionString))
  23. {
  24. sqlconn.Open();
  25.  
  26. //使用加强读写锁事务
  27. //SqlTransaction tran = sqlconn.BeginTransaction(IsolationLevel.ReadCommitted);
  28. try
  29. {
  30. foreach (DataRow dr in table.Rows)
  31. {
  32. //所有行设为修改状态
  33. dr.SetModified();
  34. }
  35. //为Adapter定位目标表
  36. SqlCommand cmd = new SqlCommand(string.Format("select Name,Pwd from {0}", TableName), sqlconn);
  37. SqlDataAdapter da = new SqlDataAdapter(cmd);
  38. SqlCommandBuilder sqlCmdBuilder = new SqlCommandBuilder(da);
  39. da.AcceptChangesDuringUpdate = false;
  40. string columnsUpdateSql = "";
  41. //SqlParameter[] paras = new SqlParameter[columnsName.Length];
  42. ////需要更新的列设置参数是,参数名为"@+列名"
  43. //for (int i = 0; i < columnsName.Length; i++)
  44. //{
  45. // //此处拼接要更新的列名及其参数值
  46. // columnsUpdateSql += ("[" + columnsName[i] + "]" + "=@" + columnsName[i] + ",");
  47. // paras[i] = new SqlParameter("@" + columnsName[i], columnsName[i]);
  48. //}
  49. //if (!string.IsNullOrEmpty(columnsUpdateSql))
  50. //{
  51. // //此处去掉拼接处最后一个","
  52. // columnsUpdateSql = columnsUpdateSql.Remove(columnsUpdateSql.Length - 1);
  53. //}
  54. //此处生成where条件语句
  55. string limitSql = ("[" + primaryKeyName + "]" + "=@" + primaryKeyName);
  56. string sql = "Update T_SQLTable SET Name=@Name,Pwd=@Pwd where ID=@ID";
  57. SqlCommand updateCmd = new SqlCommand(sql);
  58. //不修改源DataTable
  59. updateCmd.UpdatedRowSource = UpdateRowSource.None;
  60. da.UpdateCommand = updateCmd;
  61. da.UpdateCommand.Parameters.Add(,"Name");
  62. da.UpdateCommand.Parameters.Add(,"Pwd");
  63. da.UpdateCommand.Parameters.Add(, "ID");
  64.  
  65. //da.UpdateCommand.Parameters.AddWithValue("@" + primaryKeyName, primaryKeyName);
  66. //每次往返处理的行数
  67. da.UpdateBatchSize = onceUpdateNumber;
  68.  
  69. result = da.Update(table);
  70. table.AcceptChanges();
  71. //tran.Commit();
  72.  
  73. }
  74. catch
  75. {
  76. //tran.Rollback();
  77. }
  78. finally
  79. {
  80. sqlconn.Dispose();
  81. sqlconn.Close();
  82. }
  83.  
  84. }
  85. return result;
  86. }

调用:

  1. DAL.DBHelper db=new DAL.DBHelper();
  2. DataTable Oletable= db.GetDataTable("select * from T_SQLDB");
  3. DAL.DBHelper.Update(Oletable, );

SqlCommandBuilder实现大数据更新的更多相关文章

  1. 使用RedisTemplate进行Redis存取的工具类设计

    通常在访问量大数据更新频率不高的系统中会使用第三方的缓存组件来降低数据库服务的负载,鉴于模块独立分工独立的考虑,针对缓存组件操作的工作全部应该统一接口对其他业务提供服务,这样业务操作只需要关注业务实现 ...

  2. LVM快照(snapshot)备份

    转载自:http://wenku.baidu.com/link?url=cbioiMKsfrxlzrJmoUMaztbrTelkE0FQ8F9qUHX7sa9va-BkkL4amvzCCAKg2hBv ...

  3. LVM快照备份与恢复

    简介   最近在做数据备份方面的工作,用到两个工具,一个是dd,而另一个是lvm的快照(snapshot).由于数据比较大,直接是用dd非常耗时,而lvm的快照可以在几秒内轻松搞定,而且可以达到实时的 ...

  4. 存储总量达20T的MySQL实例,如何完成迁移?

    版权声明:本文由王亮原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/122 来源:腾云阁 https://www.qclou ...

  5. LVM(Logical Volume Manager)逻辑卷管理

    本文实验部分,完全由本人亲自动手实践得来 文章中有部分的内容是我个人通过实验测试出来的,虽以目前本人的能力还没发现不通之处,但错误难免,所以若各位朋友发现什么错误,或有疑惑.更好的建议等,盼请各位能在 ...

  6. 一万字详解 Redis Cluster Gossip 协议

    Redis Cluster Gossip 协议 大家好,我是历小冰,今天来讲一下 Reids Cluster 的 Gossip 协议和集群操作,文章的思维导图如下所示. 集群模式和 Gossip 简介 ...

  7. 《JAVA语言程序设计》上课笔记

    教学目标:1.使学生了解JAVA课程的性质.定位.作用:为什么要学习JAVA?让学生知道如何学好JAVA: 教学内容: 一.        问几个问题 1.             你们到这里来干什么 ...

  8. cmds系统数据库源端大表数据更新优化

    cmds系统数据库源端大表数据更新优化 以下脚本可以用于将表按照rowid范围分区,获得指定数目的rowid Extent区间(Group sets of rows in the table into ...

  9. SqlDataAdapter.Update批量数据更新

    SqlDataAdapter.Update批量数据更新 使用SqlDataAdapter.Update可以方便地对数据库进行快速.批量数据更新.我们最常用的多条数据更新方法是使用循环多次执行SQL语句 ...

随机推荐

  1. STC12C5A60S2笔记7(定时器)

    1. 基本特性 STC12C5A60S2单片机集成了两个16位定时/计数器. 1)寄存器 1.1)TMOD 定时器工作方式控制寄存器,包括13位寄存器.16位寄存器.8位寄存器等: 1.2)TCON ...

  2. Hadoop日记Day17---计数器、map规约、分区学习

    一.Hadoop计数器 1.1 什么是Hadoop计数器 Haoop是处理大数据的,不适合处理小数据,有些大数据问题是小数据程序是处理不了的,他是一个高延迟的任务,有时处理一个大数据需要花费好几个小时 ...

  3. ASP.NET MVC请求处理管道生命周期的19个关键环节(1-6)

    ASP.NET和ASP.NET MVC的HttpApplication请求处理管道有共同的部分和不同之处,本系列将体验ASP.NET MVC请求处理管道生命周期的19个关键环节. ①以IIS6.0为例 ...

  4. nodejs获取客户端IP Address

    在网上看见很多问node.js如何获取客户端IP,所以记录下来,以供大家参考. function getClientIp(req) { return req.headers['x-forwarded- ...

  5. Unity3D手游开发实践

    <腾讯桌球:客户端总结> 本次分享总结,起源于腾讯桌球项目,但是不仅仅限于项目本身.虽然基于Unity3D,很多东西同样适用于Cocos.本文从以下10大点进行阐述: 架构设计 原生插件/ ...

  6. [ZigBee] 6、ZigBee基础实验——定时器3和定时器4(8 位定时器)

    上一节讲了16位定时器1,本节讲8位定时器3和定时器4! 1.综述 Timer 3 and Timer 4 are two 8-bit timers(8位定时器). Each timer has tw ...

  7. Android Studio2.x版本无法自动关联源码的解决方法

    Android Studio2.x版本无法自动关联源码的解决方法 在学习android开发过程中,对于一个不熟悉的类,阅读源码是一个很好的学习方式,使用andorid studio开发工具的SDK M ...

  8. 实战使用Axure设计App,使用WebStorm开发(6) – 迈向后端

    系列文章 实战使用Axure设计App,使用WebStorm开发(1) – 用Axure描述需求  实战使用Axure设计App,使用WebStorm开发(2) – 创建 Ionic 项目   实战使 ...

  9. Atitit usrQBF2312 命名空间pkg 以及 api命名 spec规范

    Atitit usrQBF2312 命名空间pkg 以及 api命名 spec规范 简化英文1 常用类库sdk的命名单词统计表1 简化时间规则1 Namsspace nam spec,参照java . ...

  10. Linux运维之道(大量经典案例、问题分析,运维案头书,红帽推荐)

    Linux运维之道(大量经典案例.问题分析,运维案头书,红帽推荐) 丁明一 编   ISBN 978-7-121-21877-4 2014年1月出版 定价:69.00元 448页 16开 编辑推荐 1 ...