日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SqlBulkCopy加了事务真的会变快吗?

發(fā)布時間:2024/9/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SqlBulkCopy加了事务真的会变快吗? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

使用UseInternalTransaction

在構(gòu)造函數(shù)SqlBulkCopy(String, SqlBulkCopyOptions)里面有SqlBulkCopyOptions的選項,有如下可選項。

我們看到可選項分別有保持Identity鍵,檢查約束,是否鎖表,保持null值,觸發(fā)觸發(fā)器,使用事務。

所以如果只是想把SqlBulkCopy包含在事務中,只要打開此屬性即可。

使用System.Data.SqlClient.SqlTransaction

使用自定義的事務,將SqlBulkCopy和其他操作一起包含在一個事務中。

這種方法只要使用另一個構(gòu)造函數(shù)即可:SqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction)。

需要注意的是:當打開了UseInternalTransaction選項后,就不可以和自定義事務一起使用了,否則會拋出InvalidArgumentException。

事務影響性能?

下面是使用第一種開啟事務的測試代碼,沒有使用事務的代碼參見前一篇文章。

使用UseInternalTransaction的代碼。

1 using System; 2 using System.Data; 3 using System.Data.SqlClient; 4 5 namespace BulkInsert 6 { 7???? static class Program 8???? { 9???????? static void Main() 10???????? { 11???????????? DateTime dateTimeStart = DateTime.Now; 12???????????? Console.WriteLine("Start Insert:" + dateTimeStart.ToString("HH:mm:ss fff")); 13???????????? //導入導出的數(shù)據(jù)庫連接 14 //SqlConnection connectionDestination = new SqlConnection();15 ??????????? SqlConnection connectionSource = new SqlConnection("Server =.; User ID=sa; Password=password; Initial CataLog=ExportDataDemo_Source;"); 16 17???????????? //實例化一個SqlBulkCopy18 ??????????? var bulker = new SqlBulkCopy("Server =.; User ID=sa; Password=password; Initial CataLog=ExportDataDemo_Destination;", SqlBulkCopyOptions.UseInternalTransaction) { DestinationTableName = "DEMOTABLE", BulkCopyTimeout = 600 }; 19 20???????????? //獲取源數(shù)據(jù)庫的數(shù)據(jù)21 ??????????? SqlCommand sqlcmd = new SqlCommand("SELECT * FROM DEMOTABLE", connectionSource); 22???????????? SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(sqlcmd); 23???????????? DataTable dataTableSource = new DataTable(); 24???????????? sqlDataAdapter.Fill(dataTableSource); 25 26???????????? //可以重新定義字段的Mapping關系 27 //SqlBulkCopyColumnMapping sqlBulkCopyColumnMapping = new SqlBulkCopyColumnMapping("COL1", "NEW_COL1"); 28 //bulker.ColumnMappings.Add(sqlBulkCopyColumnMapping); 29 //connectionDestination.Open();30 ??????????? bulker.WriteToServer(dataTableSource); 31???????????? bulker.Close(); 32???????????? DateTime dateTimeEnd = DateTime.Now; 33???????????? Console.WriteLine("Insert Ending:" + dateTimeEnd.ToString("HH:mm:ss fff")); 34???????? } 35???? } 36}

Source表同樣還是10萬的數(shù)據(jù),每遷移一次后使用TRUNCATE TABLE清空數(shù)據(jù),測試三次取平均值。

截圖如下。

A:不使用事務

B:使用事務

最終對比數(shù)據(jù)。單位為秒,忘記加在圖表上面了 :)

特定的測試環(huán)境與數(shù)據(jù),測試結(jié)果僅供參考,歡迎交流、討論。

作者:Parry 出處:http://www.cnblogs.com/parry/

總結(jié)

以上是生活随笔為你收集整理的SqlBulkCopy加了事务真的会变快吗?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。