好多天沒寫博客了,剛剛畢業一個多月,在IT的路上真是迷茫啊!
關於上一篇博客中提到的,在進行批量數據插入數據庫的時候可以通過給存儲過程傳遞一個類型為Table的參數進行相關操作,在這個過程中本人沒有進行效率的測試。后來查找發現可以通過SqlBulkCopy類進行大數據插入操作,本文就來介紹一個這個類的作用並做了相關的效率測試(與Insert語句進行對比)。
SqlBulkCopy只能向SqlServer表寫入數據,該表既可以是同一個服務器上的也可以是遠程服務器上的。當然要寫入的數據即數據源不單單是SqlServer,可以是任何數據源,只要數據可以加載到DataTable中或者DataReader可以讀取的數據。
SqlBulkCopy類批量插入數據代碼如下:
1.先創建一個User類,對應數據庫的User表。

數據庫User表結構:
2.創建一個返回存儲了一萬條數據的DataTable方法:

3.在頁面上放了一個按鈕,點擊該按鈕便可進行數據的插入操作,按鈕點擊事件代碼如下:

SqlServer中通過Insert語句批量插入數據的代碼如下:
1.首先創建一個插入一萬條數據的存儲過程,插入的數據與SqlBulkCopy插入的數據一模一樣。

2.執行存儲過程。
EXEC dbo.USP_InsertUserTable
SqlBulkCopy與Insert語句效率測試對比如下:
SqlBulkCopy所用時間統計(5次):
SqlServer Insert語句所用時間統計(5次),通過工具--》Sql Server Profiler進行測試,使用的模板是TSQL_Duration:
有一點需要注意的:無論是SqlBulkCopy還是Insert語句進行操作,每次測試前都應該進行緩沖區清理以及刪除原有數據,以免對測試進行影響,代碼如下:
DBCC DROPCLEANBUFFERS
DBCC FREESYSTEMCACHE( 'ALL' )
DELETE dbo.[User]
結論:通過以上的統計分析測試,可以看出SqlBulkCopy操作大數據插入的效率性能明顯比Insert語句更高效。
本人才疏學淺,哪里有不對的歡迎指出。