C# Insert批量插入


最近項目需要做一個批量導入的功能,每次導入最少的記錄數都達到1萬,之前寫了一個通過循環Insert的方法,結果我自己都看不下了。太慢了,所以用了SqlBulkCopy,很快,100萬條數據,1分鍾都不到。

class Program
    {
        /// <summary>
        /// 批量插入
        /// </summary>
        /// <param name="dt">數據集</param>
        public static void BulkToDB(DataTable dt)
        {
            using (SqlConnection sqlConn = new SqlConnection("Data Source=.;uid=sa;pwd=123456;Initial Catalog=Test"))
            {
                SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConn);
                bulkCopy.DestinationTableName = "UserInfo";  //要插入數據的表名
                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();
                }
            }
        }

        /// <summary>
        /// 創建表結構,(Id(自增),LoginName,LoginPwd)
        /// </summary>
        /// <returns></returns>
        public static DataTable GetTableSchema()
        {
            DataTable dt = new DataTable();
            dt.Columns.AddRange(new DataColumn[]{  
                new DataColumn("Id",typeof(int)),  
                new DataColumn("LoginName",typeof(string)),  
                new DataColumn("LoginPwd",typeof(string))
            });

            return dt;
        }

        static void Main(string[] args)
        {
            //100萬條數據
            Stopwatch sw = new Stopwatch();
            for (int multiply = 0; multiply < 10; multiply++)
            {
                DataTable dt = GetTableSchema();
                for (int count = multiply * 100000; count < (multiply + 1) * 100000; count++)
                {
                    DataRow r = dt.NewRow();
                   // r[0] = 1;//因為該列是自增列,所以可以不賦值
                    r[1] = string.Format("Name-{0}", count * multiply);
                    r[2] = string.Format("Pwd-{0}", count * multiply);
                    dt.Rows.Add(r);
                }
                sw.Start();
                BulkToDB(dt);
                sw.Stop();
                Console.WriteLine(string.Format("Elapsed Time is {0} Milliseconds", sw.ElapsedMilliseconds));
            }
            Console.ReadLine();
        }
    }

執行結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM