2012-09-10 22 views
-2

我有一個windows服務,它有五個線程。每個線程都會拍攝不同的Excel文件,然後讀取excel行並插入到數據庫中。是否可以並行插入?目前我使用鎖定單一類插入。在Windows服務中如何從多個線程INSERT記錄到數據庫中?

+0

以下是我的代碼,因爲我usig鎖定每個thead將等待另一個thead完成其INSERT操作。我想避免線程等待,並想要插入parallally。給出一個解決方案,每個線程可以獨立地插入。 – Aswin

+0

公共無效在WriteToServer(數據表的dataTable,OracleBulkCopyOptions選項,IEnumerable的 columnMappings) { 鎖(writeLock) { 使用(VAR bulkcopy =新OracleBulkCopy(的ConnectionString)) { bulkcopy.DestinationTableName = destinationTable會; (列映射中的var映射) bulkcopy.ColumnMappings.Add(mapping); bulkcopy.BulkCopyTimeout = TimeOut.Value; bulkcopy.WriteToServer(dataTable); – Aswin

+0

您能否編輯您的問題,讓代碼駐留在問題中,然後刪除包含該代碼的兩條評論。 – Spontifixus

回答

1

如果您正在插入並且DBMS爲您創建密鑰,那麼應該沒有問題,也不需要鎖定。

0

這取決於您的數據庫。如果你的數據庫能夠處理多個連接(它現在不應該這樣做)。

它與你的班級沒有任何關係,你在那裏做插入。任何鎖定都沒有必要(除非,當然,你的數據庫不支持多重連接,這是我嚴重懷疑的)。

+0

以下是我的代碼,因爲我usig鎖定每個thead將等待另一個thead完成其INSERT操作。我想避免線程等待,並想要插入parallally。給出一個解決方案,每個線程可以獨立地插入。 – Aswin

+0

公共無效在WriteToServer(數據表的dataTable,OracleBulkCopyOptions選項,IEnumerable的 columnMappings) { 鎖(writeLock) { 使用(VAR bulkcopy =新OracleBulkCopy(的ConnectionString)) { bulkcopy.DestinationTableName = destinationTable會; (列映射中的var映射) bulkcopy.ColumnMappings.Add(mapping); bulkcopy.BulkCopyTimeout = TimeOut.Value; bulkcopy.WriteToServer(dataTable); – Aswin

0

確保它在交易中,並擺脫鎖定!你應該沒問題......假設你使用的任何數據庫都支持事務。

大多數現代數據庫將支持多次寫入,使用事務更安全,因爲另一次出錯。

相關問題