• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    SqlCommandBuilder类批量更新excel或者CSV数据的方法

    当你批量操作数据的时候,常常会使用到update table1 from table2的这种方式,这种方式是最简洁的。
    但当你从excel或者CSV文件更新海量数据时,再使用这种方法,那性能是不是好?字符串拼接又何其之多,大数据是不是需要分组更新?
    我不想去检测各种方法的速度,因为我个人比较认可以下方式,欢迎大家批评与指正。
    我需要使用到的类主要是SqlCommandBuilder

    /// 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, string limitWhere,int onceUpdateNumber)
      {
        if (string.IsNullOrEmpty(TableName)) return 0;
        if (string.IsNullOrEmpty(primaryKeyName)) return 0;
        if (columnsName == null || columnsName.Length = 0) return 0;
        DataSet ds = new DataSet();
        ds.Tables.Add(table);
        int result = 0;
        using (SqlConnection sqlconn = new SqlConnection(SqlHelper.ConnString))
        {
          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}", TableName,limitWhere), sqlconn, tran);
            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);
            SqlCommand updateCmd = new SqlCommand(string.Format(" UPDATE [{0}] SET {1} WHERE {2} ", TableName, columnsUpdateSql, limitSql));
            //不修改源DataTable  
            updateCmd.UpdatedRowSource = UpdateRowSource.None;
            da.UpdateCommand = updateCmd;
            da.UpdateCommand.Parameters.AddRange(paras);
            da.UpdateCommand.Parameters.Add("@" + primaryKeyName, primaryKeyName);
            //每次往返处理的行数
            da.UpdateBatchSize = onceUpdateNumber;
            result = da.Update(ds,TableName);
            ds.AcceptChanges();
            tran.Commit();
    
          }
          catch
          {
            tran.Rollback();
          }
          finally
          {
            sqlconn.Dispose();
            sqlconn.Close();
          }
    
    
        }
        return result;
      }
    
    

    注: 此方法调用时要传入的参数,包括主键名和列名都应与数据库实际的名称相对应。
    你可以不传入限定的where条件,如果传入,只需传入:Name="chamy" or Name="jundy",不需加入“where”等字符,不可以在此处传入主键的限定,你只需要在主键名这个参数上传入名称即可。

    以上就是为大家分享的SqlCommandBuilder类批量更新excel或者CSV数据的方法,希望对大家的学习有所帮助。

    您可能感兴趣的文章:
    • PHP导出MySQL数据到Excel文件(fputcsv)
    • MySQL如何导入csv格式数据文件解决方案
    • oracle使用sql脚本生成csv文件案例学习
    • 解析csv数据导入mysql的方法
    • Mysql 导入导出csv 中文乱码问题的解决方法
    • mysql使用SQLyog导入csv数据不成功的解决方法
    • php将csv文件导入到mysql数据库的方法
    • php使用指定编码导出mysql数据到csv文件的方法
    • MySQL 导出数据为csv格式的方法
    • 把CSV文件导入到SQL Server表中的方法
    上一篇:asp.net操作Word实现批量替换
    下一篇:ASP.NET MVC中图表控件的使用方法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    SqlCommandBuilder类批量更新excel或者CSV数据的方法 SqlCommandBuilder,类,批量,更新,