2013-12-11 83 views
0

我使用的是短小精悍的彩虹database.cs擴展,我需要做批量插入用短小精悍的彩虹

private void insertList(IEnumerable<myObject> list) 
    { 
      using (SqlConnection conn = new SqlConnection(connectionString)) 
     { 
      var db = myDB.Init(conn, commandTimeout: 100); 
      db.myTable.tableName = "ds.myTable"; 
      Parallel.ForEach(dsList, a => db.myTableInsert(a) 
         ); 
      db.Dispose(); 
     } 
    } 

這是行不通的,我想我需要打開和關閉並行內部的連接。的ForEach。這是寫作的方式嗎?

我想使用這個擴展,它非常有幫助,但有這個插入列表的問題。我在網上找不到關於使用這個擴展和使用列表的任何信息。

回答

2

通常數據庫連接不是線程安全的,因此在相同的連接上並行插入就會造成麻煩。

所以我想說的是,您需要打開並關閉Parallel.ForEach()內部的連接。您可能也想要對其進行基準測試。我並不完全相信,像多數據庫連接那樣並行插入會比在單個連接上進行常規循環時更快。

+0

同意,在多個線程中插入同一個表中也可能導致數據庫內容/死鎖等。 –

+0

好的,有道理。 –