zoukankan      html  css  js  c++  java
  • c# 使用SqlBulkCopy 提高大数据插入数据库速度

    自己得一点总结:
      1.BulkCopy采用的是插入方式,不是覆盖方式(原数据不动,在原数据的后面复制上dataTable中的内容)
      2.自增的字段不用赋值
      3.数据库字段名和dataTable列名可以不一样,对应关系用bulkcopy.ColumnMappings.Add("author", "author"); 关联
    public void SaveTable(DataTable dtTable)
            {
                SqlBulkCopy sbc = new SqlBulkCopy(DbHelperSQL.connectionString, SqlBulkCopyOptions.UseInternalTransaction);
                sbc.BulkCopyTimeout = 5000;
                try
                {                
                    sbc.DestinationTableName = "FAST_Temp";
                    sbc.WriteToServer(dtTable);
                }
                catch (Exception ex)
                {
                    //处理异常
                }
                finally
                {
                    //sqlcmd.Clone();
                    //srcConnection.Close();
                    //desConnection.Close();
                }
            }

    另外拓展一下SqlBulkCopyOptions枚举

     成员名称说明
      AllowEncryptedValueModifications

    允许加密值修改。

      CheckConstraints

    在插入数据的同时检查约束。 默认情况下,不检查约束。

      Default

    使用所有选项的默认值。

      FireTriggers

    如果指定,则使服务器激发插入触发器,从而使行插入数据库。

      KeepIdentity

    保留源标识值。 未指定标识值时,该值由目标指派。

      KeepNulls

    在目标表中保留 null 值,而不考虑默认值的设置。 如果未指定,由默认值替换 null 值(适用时)。

      TableLock

    获取批量复制操作持续时间的批量更新锁定。 如果未指定,则使用行锁定。

      UseInternalTransaction

    如果指定,批量复制操作的每一批都将在事务内发生。 如果指示该选项,并且还向构造函数提供SqlTransaction 对象,则发生 ArgumentException

  • 相关阅读:
    C/C++中volatile关键字详解(转)
    Spring中 @Autowired标签与 @Resource标签 的区别(转)
    [转]各种互斥量的总结
    nginx限制ip访问(转)
    HDU 4833 Best Financing (DP)
    HDU 4832 Chess (DP)
    HDU 4831 Scenic Popularity
    POJ 2155 Matrix (二维线段树)
    POJ 2155 Matrix (二维树状数组)
    HDU 4819 Mosaic (二维线段树)
  • 原文地址:https://www.cnblogs.com/dansediao/p/5482467.html
Copyright © 2011-2022 走看看