2013-12-11 41 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

好的,有道理。 –