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

  • 相关阅读:
    Apache Spark 2.2.0 中文文档
    Apache Spark 2.2.0 中文文档
    Apache Spark 2.2.0 中文文档
    Apache Spark 2.2.0 中文文档
    Apache Spark 2.2.0 中文文档
    Apache Spark RDD(Resilient Distributed Datasets)论文
    Apache Spark 2.2.0 中文文档
    Apache Spark 2.2.0 中文文档
    【机器学习实战】第10章 K-Means(K-均值)聚类算法
    [译]flexbox全揭秘
  • 原文地址:https://www.cnblogs.com/dansediao/p/5482467.html
Copyright © 2011-2022 走看看