数据库一次性插入10w条数据,怎么插入效率快

    1. 在SQL Server 中插入一条数据使用Insert语句,但是如果想要批量插入一堆数据的话,循环使用Insert不仅效率低,而且会导致SQL一系统性能问题

    2.  下面介绍SQL Server支持的两种批量数据插入方法:Bulk和表值参数(Table-Valued Parameters)。

    3. bulk方法主要思想是通过在客户端把数据都缓存在Table中,然后利用SqlBulkCopy一次性把Table中的数据插入到数据库

    4. 代码如下:

    5. public static void BulkToDB(DataTable dt) 

      SqlConnection sqlConn = new SqlConnection( 
      ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString); 
      SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConn); 
      bulkCopy.DestinationTableName = "BulkTestTable"; 
      bulkCopy.BatchSize = dt.Rows.Count; 
      try 

      sqlConn.Open(); 
          if (dt != null && dt.Rows.Count != 0) 
          bulkCopy.WriteToServer(dt); 

      catch (Exception ex) 

      throw ex; 

      finally 

      sqlConn.Close(); 
      if (bulkCopy != null) 
      bulkCopy.Close(); 


      public static DataTable GetTableSchema() 

      DataTable dt = new DataTable(); 
      dt.Columns.AddRange(new DataColumn[]{ 
      new DataColumn("Id",typeof(int)), 
      new DataColumn("UserName",typeof(string)), 
          new DataColumn("Pwd",typeof(string))}); 

      return dt; 

      static void Main(string[] args) 

      Stopwatch sw = new Stopwatch(); 
      for (int multiply = 0; multiply < 10; multiply++) 

      DataTable dt = Bulk.GetTableSchema(); 
      for (int count = multiply * 100000; count < (multiply + 1) * 100000; count++) 

      DataRow r = dt.NewRow(); 
      r[0] = count; 
      r[1] = string.Format("User-{0}", count * multiply); 
      r[2] = string.Format("Pwd-{0}", count * multiply); 
      dt.Rows.Add(r); 

      sw.Start(); 
      Bulk.BulkToDB(dt); 
      sw.Stop(); 
      Console.WriteLine(string.Format("Elapsed Time is {0} Milliseconds", sw.ElapsedMilliseconds)); 

      Console.ReadLine(); 
      }

    6. 转载自:http://www.aspnetjia.com/Cont-133.html
原文地址:https://www.cnblogs.com/aspnetjia/p/5136999.html