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

  • 相关阅读:
    第三周课程总结实验报告
    Java第二周学习总结
    2019春总结作业
    第十二周作业
    第十一周作业
    第十周作业
    第九周作业
    第八周作业
    第二周课程总结
    2019春总结
  • 原文地址:https://www.cnblogs.com/binyao/p/4900124.html
Copyright © 2020-2023  润新知