使用DataAdpater自动批量更新DataSet中的数据到数据库

使用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命令

时间: 2024-11-05 16:09:52

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

c#如何将dataset中的数据批量导入oracle数据库

不要写insert语句,因为数据库字段太多了,有什么简单点的效率高的方法吗 public void MultiInsertData(DataSet ds) { string connt = "Oracle的连接字符串"; string sql = "select id,name,- from tablename";必须与ds中的一致 DataTable dt = ds.Defaults[0]; OracleConnection conn = new OracleCo

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

思路: 1. 设置DataTable中每行的状态标识,即调用DataRow的方法setAdded().setModified().Delete() 2. 使用DataAdapter的Update(DataTable)方法 代码例子: String connString = "........"; //连接字符串 String selectCommand = "select * from item"; SqlDataAdapter da = new SqlDataAd

将DataSet中的数据写入XML

protected void Button1_Click(object sender, EventArgs e) { string conStr = ConfigurationManager.ConnectionStrings["lianxiConnectionString"].ConnectionString; using (SqlConnection conn=new SqlConnection(conStr)) { conn.Open(); using (SqlCommand c

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

1.DataSet 中的数据排序 DataSet ds = new DataSet(); // 获取当前排口的数据 ds = _xiaobill.GetHistoryData(yinZiBianm, zhanDian, beginDate, endDate, dNum); DataTable dt = ds.Tables[0]; DataRow[] dt2 = dt.Select("1=1","数据时间 ASC "); DataRow[]装成DataTable Da

实现数据在前台动态显示之分页的实现(将DataSet中的数据分页显示)

在实现前台动态显示数据时有多种方法,但使用到将DataSet中的数据分页这一方法时发现很多地方都能用得到,在这里记录一下. /// <summary> /// 分页的实现(将DataSet中的数据分页显示) /// </summary> /// <param name="ds"></param> /// <returns></returns> public DataSet SplitDataSet() { Data

Java -&gt; 把Excel表格中的数据写入数据库与从数据库中读出到本地 (未完善)

写入: private void insertFile(HttpServletRequest request, HttpServletResponse response) throws IOException { String path_member = request.getParameter("path_member"); List list = this.insert("f:/tmp001.xls", "gs_sale_members");

【ADO.NET】3、从TXT中导入数据到数据库

private void btnInput_Click(object sender, EventArgs e) { if (opFile.ShowDialog() != DialogResult.OK) //判断用户点击 确定 还是 取消,不点确定,则返回程序 { return; } using(FileStream FStream = File.OpenRead(opFile.FileName)) //打开文件进行读取 { //定义字符编码为GB2312 using (StreamReader

用Toad把excel中的数据导入数据库的表中

第1步:找到菜单选项 第2步:选择表名 第3步:选择文件类型为Excel 第4步:设置参数 在oracle中trim函数可以除去字符串前后的空格,所以选上. 第5步:把excel中的列和数据库中的字段对应起来.每一列对应一个字段. 第6步:查看约束 第7步:设置导入模式,我设置的时导入完成后不提交,手动提交. 点击Execute执行. 执行过程中: 出现以下错误,问到是否继续执行.这种错误一般是因为excel中的数据结构与数据库表中的数据类型不统一而引起的. 我点击的yes继续执行,中间可能还会

批量更新zabbix中的主机名

原本zabbix中的agent段设置的hostname是ip地址 现在要改成linux的hostname, 首先用saltstack批量修改zabbix_agentd.conf 代码如下 zabbix: file.append: - name: /usr/local/etc/zabbix_agentd.conf - text: Hostname={{ grains['fqdn'] }} 接下来要修改zabbixserver数据库 代码如下,写的比较简单, #!/bin/bash for IP i