標籤:
SqlBulkCopy類是System.Data.SqlClient下的類,我們開發中不常用,甚至不知道有這麼一個類的存在,但確實比sql插入,事務批量插入,sql批量拼接插入快很多,比調用預存程序插入方便
下面是它的用法:
public static bool ExecuteTransactionScopeInsert(DataTable dt, int batchSize)
{
- int count = dt.Rows.Count;
- string tableName = "TestTable";
- int copyTimeout = 600;
- bool flag = false;
- try
- {
- using (SqlConnection cn = new SqlConnection(connectionString))
- {
- using (TransactionScope scope = new TransactionScope())
- {
- cn.Open();
- using (SqlBulkCopy sbc = new SqlBulkCopy(cn))
- {
- //伺服器上目標表的名稱
- sbc.DestinationTableName = tableName;
- sbc.BatchSize = batchSize;
- sbc.BulkCopyTimeout = copyTimeout;
- for (int i = 0; i < dt.Columns.Count; i++)
- {
- //列映射定義資料來源中的列和目標表中的列之間的關係
- sbc.ColumnMappings.Add(dt.Columns[i].ColumnName, dt.Columns[i].ColumnName);
- }
- sbc.WriteToServer(dt);
- flag = true;
- scope.Complete();//有效事務
- }
- }
- }
- }
- catch (Exception ex)
- {
- LogHelper.Error(ex.Message);
- return false;
- }
- return flag;
- }
SqlBulkCopy原理是採用了SQL Server的BCP協議進行資料的批量複製,結合使用事務,就我們的案例而言,大約每批800條是平衡點,效能比逐條插入提高了100多倍,並比同樣使用事務批量插入的案例效能提升了7倍以上
這裡是來源作者實驗的連結:http://blog.csdn.net/amandag/article/details/6393717
大資料批量插入資料庫使用(SqlBulkCopy )效率更高