我使用this solution在數據庫中插入了大約300萬條記錄。最後,當應用程序已被插入記錄了一段時間(我上次運行持續了大約4個小時),它給出了下面的SQLException超時:在LINQ to SQL中超時插入數百萬條記錄
「SqlExcepetion:超時過期的timeoutperiod過去完成之前,操作或服務器沒有響應。「
處理此異常的最佳方法是什麼?有沒有辦法來防止這種情況發生,或者我應該發現異常?
提前致謝!
我使用this solution在數據庫中插入了大約300萬條記錄。最後,當應用程序已被插入記錄了一段時間(我上次運行持續了大約4個小時),它給出了下面的SQLException超時:在LINQ to SQL中超時插入數百萬條記錄
「SqlExcepetion:超時過期的timeoutperiod過去完成之前,操作或服務器沒有響應。「
處理此異常的最佳方法是什麼?有沒有辦法來防止這種情況發生,或者我應該發現異常?
提前致謝!
如果你擁有的一切是一把錘子,所有問題看起來都像釘子。
說真的,即使試圖使用Linq2SQL插入300萬條記錄也是一種破壞性的方法。 ORM是很多好東西,它們不是批量插入元素。
我建議:
大容量負載有很多性能優勢。自然地,假設你在這裏談論ETL加載過程 - 但是除了數據倉庫/報告/歸檔風格的加載操作之外,我沒有看到任何300萬的加載,它最初和最終定義都不是實時事務處理;)
使用正確的工具進行工作。
我認爲你必須增加命令的CommandTimeout。
解決方案,可以發現here
參見http://stackoverflow.com/questions/949374/to-increase-the-timeout-period/949381#949381 – abatishchev 2010-05-03 11:21:52
生成一個SQL腳本(或字符串),並直接執行。
L2SQL不是用於這樣的批量操作。
我相信這樣的表達是「如果你唯一的工具是一把錘子......」 – si618 2010-05-03 11:27:09
不管表達是,這是一個很好的解釋!爲這個遊戲者+1,贏! – Bas 2010-05-03 11:31:00
除了TomTom的回答,看看SqlBulkCopy類:http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.aspx – 2010-05-03 11:40:20