使用DataAdpater的批量更新,好处是不用写具体的sql脚本,尤其是做web服务这个优势非常吸引人。

[WebMethod(Description = "Update服务提供的方法,将包含修改后数据的DateSet与本地数据库同步更新,成功返回更新的行数,失败返回-1。"), SoapHeader("currentUser")]   
public int Update(DataSet ds)   
{   
    if (!ValidateUser(currentUser.UserName, currentUser.UserPass))   
    {   
        return -1;   
    }   
    else  
    {   
        int res = 0;   
  
        using (SqlConnection sqlconn = new SqlConnection("Data Source=.;Initial Catalog=xxxx;User ID=sa;Password=sa"))   
        {   
            sqlconn.Open();   
  
            / / //使用加强读写锁事务   
            SqlTransaction tran = sqlconn.BeginTransaction(IsolationLevel.ReadCommitted);   
            try  
            {   
           
                foreach (DataRow dr in ds.Tables[0].Rows)   
                {   
                    //所有行设为修改状态   
                    dr.SetModified();   
                }   
  
  
                //为Adapter定位目标表   
                SqlCommand cmd = new SqlCommand(string.Format("select * from {0} where 1=0 ", ds.Tables[0].TableName), sqlconn, tran);   
  
                SqlDataAdapter da = new SqlDataAdapter(cmd);   
  
              
                SqlCommandBuilder sqlCmdBuilder = new SqlCommandBuilder(da);   
                da.AcceptChangesDuringUpdate = false;   
  
  
                SqlCommand updatecmd = new SqlCommand(string.Format(" UPDATE [{0}] SET  [Name] = @Name WHERE ([ID] = @ID) ", ds.Tables[0].TableName));   
                //不修改源DataTable   
                updatecmd.UpdatedRowSource = UpdateRowSource.None;   
                da.UpdateCommand = updatecmd;   
  
  
                da.UpdateCommand.Parameters.Add("@Name", SqlDbType.NVarChar, 50, "Name");   
                da.UpdateCommand.Parameters.Add("@ID", SqlDbType.Int, 4, ds.Tables[0].Columns[0].ColumnName);   
  
  
  
                da.UpdateBatchSize = 10000;   
  
  
                res = da.Update(ds.Tables[0]);   
  
               
                ds.AcceptChanges();   
                tran.Commit();   
            
                sqlconn.Close();   
  
            }   
            catch    
            {   
             
                tran.Rollback();   
                return -1;   
            }   
  
  
        }   
        return res;   
    }   
  
  
}  

注意:如果不指定DataAdapter的UpdateCommand ,则DataAdapter的CommandBuilder会自动构造默认的Update命令

使用DataAdpater自动批量更新DataSet中的数据到数据库的更多相关文章

  1. PHP如何批量更新MYSQL中的数据

    最近项目需要用到批量更新数据库里的数据,在网上找了一下这方面的例子,觉得这个还不错,分享给大家. 在这个业务里里面涉及到了更新两张数据表,那么大家是不是会想到非常简单,马上上代码 $sql ,type ...

  2. PHP批量更新MYSQL中的数据

    原文链接:https://blog.csdn.net/wuming19900801/article/details/62893429 $sql = "update newhouse_clic ...

  3. .net批量更新(插入、修改、删除)数据库

    思路: 1. 设置DataTable中每行的状态标识,即调用DataRow的方法setAdded().setModified().Delete() 2. 使用DataAdapter的Update(Da ...

  4. 多线程查询数据,将结果存入到redis中,最后批量从redis中取数据批量插入数据库中【我】

    多线程查询数据,将结果存入到redis中,最后批量从redis中取数据批量插入数据库中 package com.xxx.xx.reve.service; import java.util.ArrayL ...

  5. DataSet 中的数据排序 及 DataRow装成DataTable

    1.DataSet 中的数据排序 DataSet ds = new DataSet(); // 获取当前排口的数据 ds = _xiaobill.GetHistoryData(yinZiBianm, ...

  6. 使用Ruby来实现批量更新AD中字段

    准备工作 安装需要用到的gem gem install net-ldap gem install roo 准备好要更新的数据,比如exel表: /root/account.xlsx,内容如下 姓名 性 ...

  7. Winform中用comboBox来选择显示Dataset中表格数据

    这是一次偷懒的尝试,因为每次都必须打开代码,调试才能看见数据,发现问题.也是借鉴了调试中查看dataset数据的模式,查看不同表格.经历一番研究,总算实现了想要的效果了,故作此一笔记.与人共享. 界面 ...

  8. C# 手动编写 DataSet,DataTable 及遍历DataSet中的数据

    一.手动编写DataSet:    有时候不想从数据库导出 DataSet,或者有其他的需要,要将数据库里的DataSet包装成另一个样子,这个时候,了解DataSet的内部结构就非常必要.DataS ...

  9. 【Redis 向Redis中批量导入mysql中的数据(亲自测试)】

    转自:https://blog.csdn.net/kenianni/article/details/84910638 有改动,仅供个人学习 问题提出:缓存的冷启动问题 应用系统新版本上线,这时候 re ...

随机推荐

  1. Java中的服务器与客户端的简单连接

    Java中重点之一就是服务器与客户端的连接,因为是在同一台PC上,所以就设置服务器的地址为“localhost”,注意,我当时试着设置其他名称,但都不行,这个原因还请老司机告一下.另外还要注意,服务端 ...

  2. [转]基于全注解的Spring3.1 mvc、myBatis3.1、Mysql的轻量级项目

    摘要 对于现在主流的j2ee企业级开发而言,ssh(struts+hibernate+spring)依然是一个事实的标准.由struts充当的mvc调度控制:hibernate的orm持久化映射:sp ...

  3. Codeforces Round #344 (Div. 2) B. Print Check 水题

    B. Print Check 题目连接: http://www.codeforces.com/contest/631/problem/B Description Kris works in a lar ...

  4. oracle增加表空间的四种方法

    1. 查看所有表空间大小 select tablespace_name,sum(bytes)/1024/1024 from dba_data_files group by tablespace_nam ...

  5. 工作流 jBMP4.4表结构

    (一)资源库和运行时表结构       JBPM4_DEPLOYMENT,      JBPM4_DEPLOYPROP,      JBPM4_LOB 存储流程定义相关的部署信息       JBPM ...

  6. Understanding how SQL Server executes a query

    https://www.codeproject.com/Articles/630346/Understanding-how-SQL-Server-executes-a-query https://ww ...

  7. sourceinsight常用快捷键

    Alt+l       激活语法窗口 ,搜索语法(当前打开文件的函数.宏定义搜索输入区域), Alt+,  Alt+.  分别表示后退工作区.前进工作区 shift+F5   标记一个单词 shift ...

  8. php ob静态缓存

    <?php ob_start(); //打开输出缓冲区 $cacheTime = 864000; //设置缓存页面过期时间 $cacheDir = 'cacheDir'; //设置缓存页面文件目 ...

  9. 《Windows驱动开发技术详解》之StartIO例程

    内容中包含 base64string 图片造成字符过多,拒绝显示

  10. 使用微信JSSDK自定义微信分享标题、描述、和图标

    最近做一个项目的时候用到微信的分享 ,实现定义分享标题,图片,了解到微信在发布JSSDK后,把包括自定义分享在内的众多网页服务接口进行了统一.如果要想自定义分享自己的网页信息给好友或朋友圈,就最好使用 ...