有時候我們會有需要大量資料新增進SQL Table裡面,如檔案上傳(該檔案全部寫入SQL Table),這時候我們並不會用Transaction 包著然後用for 跑Insert迴圈,因為這樣所花費的時間是非常大的。
我們會使用SqlBulkCopy 的方式來做Insert 的動作
至於SqlBulkCopy 的多載有甚麼?
我這邊提供 MSDN 的文件
下方範例是用包含著Transaction的方式
BatchSize 的說明 參考 黑大的文章
主要是說明BatchSize 的用途,讓Bulk Insert 過程中每1000筆Commit一次(主要是log的問題)
只要把DataTable 定義好欄位(Table欄位和DataTable欄位對應)、資料
WriteToServer(DataTable) 即可
public bool ExecSqlBulkCopy(DataTable dtSource)
{
using (SqlConnection connection = new SqlConnection(strConnMain))
{
connection.Open();
SqlTransaction sqlTrans = connection.BeginTransaction();
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection, SqlBulkCopyOptions.KeepIdentity, sqlTrans))
{
DataTable dt = dtSource;
bulkCopy.DestinationTableName = "Table名稱";
bulkCopy.BatchSize = 1000;
bulkCopy.BulkCopyTimeout = 60;
try
{
bulkCopy.WriteToServer(dt);
}
catch (Exception)
{
sqlTrans.Rollback();
return false;
}
sqlTrans.Commit();
return true;
}
}
}