• SqlBulkCopy实现数据批量复制(ZZ)


    最近项目中使用到了SqlBulkCopy实现批量复制,在这里,我把部分代码筛选出来简单说明一下,希望对大家研究和使用SqlBulkCopy 有帮助.因为是筛选的代码,不是完整的方法,请大家尽量不要直接拷贝使用,这篇文章的目的上帮大家简单的理解SqlBulkCopy.

    /*******************调用SqlBulkCopy实现DataTable到SQL的批量拷贝******************/
                
    if (SqlConn.State == ConnectionState.Closed)
                
    {
                    SqlConn.Open();
                }


                
    //定义SQL事务并嵌入到批量拷贝的工作中
                SqlTransaction objSqlTran = SqlConn.BeginTransaction();

                
    //定义SqlBulkCopy:SqlConn为SqlConnection,SqlBulkCopyOptions枚举类型,objSqlTran为调用的事务
                SqlBulkCopy objSqlCopy = new SqlBulkCopy(SqlConn, SqlBulkCopyOptions.KeepIdentity, objSqlTran);

                
    //分批次拷贝的行数
                objSqlCopy.BatchSize = 10;
                objSqlCopy.BulkCopyTimeout 
    = 240;
                
    //目标表名
                objSqlCopy.DestinationTableName = "DetailAccountReport";

                
    //源表对目标表字段的映射,因为默认是按顺序以及名字匹配,所以这步很重要
                objSqlCopy.ColumnMappings.Add("ProjectDefID""ProjectDefID");
                objSqlCopy.ColumnMappings.Add(
    "Num""SumNum");
                objSqlCopy.ColumnMappings.Add(
    "Money""SumMoney");
                objSqlCopy.ColumnMappings.Add(
    "Explain""Explain");

                
    try
                
    {
                    
    //将DataTabel类型的objDT作为源拷贝到目标表
                    objSqlCopy.WriteToServer(objDT);
                    objSqlTran.Commit();
                }

                
    catch
                
    {
                    objSqlTran.Rollback();
                }

                
    finally
                
    {
                    objSqlCopy.Close();
                    SqlConn.Close();
                }


                
    return objDT;

    说明://源表对目标表字段的映射,因为默认是按顺序以及名字匹配,所以这步很重要
                objSqlCopy.ColumnMappings.Add("ProjectDefID", "ProjectDefID");
                objSqlCopy.ColumnMappings.Add("Num", "SumNum");
                objSqlCopy.ColumnMappings.Add("Money", "SumMoney");
                objSqlCopy.ColumnMappings.Add("Explain", "Explain");

    注意这里,前面是源表字段,后面是目标表字段.默认是按照顺序和名称匹配的形式,所以要求两个数据集的结构完全一致,但是在现实使用中,很少有完全一致的情况出现,所以这段代码尤其重要.


    objSqlCopy.WriteToServer(objDT);

    objDT是我们项目中在之前经过处理的DataTable, WriteToServer()支持对DataTable,DataReader,DataRow[]的操作,大家可以灵活运用.

  • 相关阅读:
    wamp2.5版本配置多端口虚拟主机
    Java--解决java compiler level does not match the version of the installed java project facet错误
    http--响应请求状态码
    Nginx--Windows环境下Nginx+tomcat配置(包括动静分离)
    Tomcat--配置tomcat,使其除了接受本地访问外,拒绝其他 IP 的访问
    sqlserver -- 学习笔记(七)获取同组数据的前两条记录
    java--实现将文字生成二维码图片,并在中间附上logo,下方附上文字
    sqlserver -- 学习笔记(六)日期格式转换
    Java --计算百分比
    Java -- 根据当前日期获取当前一周的所有日期
  • 原文地址:https://www.cnblogs.com/end/p/1451986.html
Copyright © 2020-2023  润新知