/// <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实现大数据更新的更多相关文章

  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. dojo/dom-construct.toDom方法学习笔记

    toDom方法用来将html标签字符串转化成DOM节点.1.7之后toDom方法被分配到了dom-construct模块. require(["dojo/dom-construct" ...

  2. SQL语句中,Conversion failed when converting datetime from character string.错误的解决办法

    在项目开发过程中,我们经常要做一些以时间为条件的查询,比如查询指定时间范围内的历史记录,然而这些时间都是从UI传递过来的参数,所以我们写的sql语句就必须用到字符串拼接.当然,在C#中写SQL语句还好 ...

  3. 用canvas开发H5游戏小记

    自神经猫风波之后,微信中的各种小游戏如雨后春笋般目不暇接,这种低成本,高效传播的案例很是受开发者青睐.作为一名前端,随手写个这样的小游戏出来应该算是必备技能吧.恰逢中秋节,部门决定上线一个小游戏,在微 ...

  4. 【原创】三分钟教你学会MVC框架——基于java web开发(1)

    MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用于组织代码用一种业务逻辑和数据显示分离的方法. ...

  5. Ember.js实现单页面应用程序

    1.1.1 摘要 单页应用程序 (SPA) 是加载单个HTML 页面并在用户与应用程序交互时动态更新该页面的Web应用程序. SPA使用AJAX和HTML5创建流畅且响应迅速的Web应用程序,不会经常 ...

  6. 使用aggregate在MongoDB中查找重复的数据记录

    我们知道,MongoDB属于文档型数据库,其存储的文档类型都是JSON对象.正是由于这一特性,我们在Node.js中会经常使用MongoDB进行数据的存取.但由于Node.js是异步执行的,这就导致我 ...

  7. AutoMapper的简单使用

    接触AutoMapper已经有两年多的时间了,在ORM框架中,它使持久层对象与DTO对象之间的转换变得相当简单. 随着负责的项目的增多,使用的技术框架一多起来,很多具体的技术点难免记不清, 加上同时兼 ...

  8. 桃小蛋 简单粗暴BFC总结—附代码图和效果图

    说明:问题图与解决图的区别:黄色箭头那行代码的有和无. BFC 定义 BFC(Block formatting context)直译为"块级格式化上下文".它是一个独立的渲染区域, ...

  9. getattribute()与getparameter()的区别

    1.它们取到的值不同.getAttribute取到的是对象(object),而getParameter取到的是String. 2.数据传递路劲不同.request.getParameter方法传递的数 ...

  10. _学生选课数据库SQL语句练习题

    1. 查询Student表中的所有记录的Sname.Ssex和Class列. select Sname,Ssex,t.sclass from STUDENT t 2. 查询教师所有的单位即不重复的De ...