SqlBulkCopy類,為微軟的一個大量數據快速插入。直接上代碼
表結構:

namespace SqlBulkCopy的演示 { using System.Data.SqlClient; public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { //string connString = "server=.;database=CrmChat14;uid=sa;pwd=master;"; string connString = "server=.;database=MyData;Integrated Security=True;"; //0.0 准備一個DataTable內存表,向這個表中增加10000條數據 DataTable dt = new DataTable(); //在dt中一定要按照DestinationTableName對應的表結構來進行創建 //但是:自增ID,可以不建立 dt.Columns.Add("dd", typeof(string)); //構造1W條數據 int count = 100 * 100; for (int i = 0; i < count; i++) { //根據dt的表結構創建一個同結構的DataRow對象 DataRow row = dt.NewRow(); //給row中的dd字段賦值 row["dd"] = "測試" + i; //將row對象添加到內存表dt中 dt.Rows.Add(row); } //統計下面代碼的執行時間: System.Diagnostics.Stopwatch st = new System.Diagnostics.Stopwatch(); st.Start(); //1.0 實例化sqlbulkcopy的對象 using (SqlBulkCopy copy = new SqlBulkCopy(connString)) { //告訴copy對象按照指定的5000條數據量來進行插入 //如果這個數據太龐大的話,一定要加上BatchSize 來分配處理 copy.BatchSize = 5000; //告訴copy將dt中的數據插入到數據庫CrmChat14中的SqlBulkCopyDemo表 copy.DestinationTableName = "SqlBulkCopyDemo"; //告訴copy dt內存表中的dd列對應的是SqlBulkCopyDemo表中的BName,他們之間一定要有一個映射 copy.ColumnMappings.Add("dd", "BName"); //2.0 將數據批量的插入到db中 copy.WriteToServer(dt); } st.Stop(); MessageBox.Show("插入" + count + "條數據,耗時:" + st.ElapsedMilliseconds + "毫秒"); } } }
結果:

SqlBulkCopy的本質,是用的INSERT bulk插入的數據。
