zoukankan      html  css  js  c++  java
  • C#中的SqlBulkCopy批量插入数据

    在C#中,我们可以使用sqlBulkCopy去批量插入数据,其他批量插入方法不在讨论。

     1         /// <summary>
     2         /// SqlBulkCopy批量插入数据
     3         /// </summary>
     4         /// <param name="connectionStr">链接字符串</param>
     5         /// <param name="dataTableName">表名</param>
     6         /// <param name="sourceDataTable">数据源</param>
     7         /// <param name="batchSize">一次事务插入的行数</param>
     8         public static void SqlBulkCopyByDataTable(string connectionStr, string dataTableName, DataTable sourceDataTable, int batchSize = 100000)
     9         {
    10             using (SqlConnection connection=new SqlConnection(connectionStr))
    11             {
    12                 using (SqlBulkCopy sqlBulkCopy=new SqlBulkCopy(connectionStr,SqlBulkCopyOptions.UseInternalTransaction))
    13                 {
    14                     try
    15                     {
    16                         sqlBulkCopy.DestinationTableName = dataTableName;
    17                         sqlBulkCopy.BatchSize = batchSize;
    18                         for (int i = 0; i < sourceDataTable.Columns.Count; i++)
    19                         {
    20                             sqlBulkCopy.ColumnMappings.Add(sourceDataTable.Columns[i].ColumnName,sourceDataTable.Columns[i].ColumnName);
    21                         }
    22                         sqlBulkCopy.WriteToServer(sourceDataTable); 
    23                     }
    24                     catch (Exception ex)
    25                     {
    26 
    27                         throw ex;
    28                     }
    29                 }
    30             }
    31         }

          使用方式如下,这里我将插入100万条数据,

      在SqlBulkCopyByDataTable方法中每次插入10万条,

      其插入方式SqlBulkCopyOptions.UseInternalTransaction (即事务插入,可用其他方式。)

     1             DataTable dt = new DataTable("测试");
     2             dt.Columns.Add("ID",typeof(int));
     3             dt.Columns.Add("Name", typeof(string));
     4             dt.Columns.Add("Age", typeof(int));
     5             for (int i = 1; i <= 1000000; i++)
     6             {
     7                 DataRow row = dt.NewRow();
     8                  row["ID"] =  i;
     9                  row["Name"] = "名字"+i;
    10                  row["Age"] = i;
    11                  dt.Rows.Add(row);
    12             }
    13 
    14             string connStr = System.Configuration.ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
    15 
    16             Stopwatch stopWatch = new Stopwatch();
    17             stopWatch.Start();
    18 
    19 
    20            SqlBulkCopyByDataTable(connStr, "T_Demo", dt); 
    21 
    22             Console.WriteLine(stopWatch.Elapsed);  
    23             Console.ReadKey();

    耗时为如下。

  • 相关阅读:
    Leetcode Binary Tree Level Order Traversal
    Leetcode Symmetric Tree
    Leetcode Same Tree
    Leetcode Unique Paths
    Leetcode Populating Next Right Pointers in Each Node
    Leetcode Maximum Depth of Binary Tree
    Leetcode Minimum Path Sum
    Leetcode Merge Two Sorted Lists
    Leetcode Climbing Stairs
    Leetcode Triangle
  • 原文地址:https://www.cnblogs.com/chenghu/p/5694006.html
Copyright © 2011-2022 走看看