几个插件性能c#

时间:2011-10-14 00:51:47

标签: c# database

我在一个表中做了几次插入。现在,我已经迭代了一个对象列表,对于每个对象,我使用insert语句执行一个ExecuteNonQuery。

我想知道是否有紧固的方法来做到这一点。 这样,插入800个寄存器需要几分钟。

我在Java中使用了executeBatch方法,对于这个提议,c#中有类似的东西。

问候!

4 个答案:

答案 0 :(得分:5)

插入相对快速/便宜。 提交缓慢/昂贵。

除非它是延迟连接,否则多个(如数百个)插入语句应该没问题。

“......需要几分钟......”听起来好像没有使用交易(因此可能有800次提交 - 哎哟!)。在C#中控制事务的最简单方法之一是使用TransactionScope

using (var connection = ...)
using (var tx = new TransactionScope()) {
   foreach (var row in rows) {
      // insert row
   }
   // commit all at once
   tx.Complete();
}

如果限制交易数量(因此提交)不足以满足功能要求,我只会考虑方法。

快乐的编码。

答案 1 :(得分:1)

您的陈述可能是这样的:

insert into my_table (field1, field2, ...)
values (row1_value1, row2_value2, ...),
       (row2_value1, row2_value2, ...), ...

因此,如果您创建一个StringBuilder,您可以批量处理20,50或100个插入并发出更少的插入语句。

答案 2 :(得分:1)

如果您想从.NET应用程序中执行所有操作,请查看Performing Batch Operations Using DataAdapters (ADO.NET)

如果您希望获得最快的性能,可以使用bcp utility(假设您正在使用SQL Server。)您可以将数据写入分隔文件并使用bcp执行插入。

答案 3 :(得分:0)

如何将所有插入语句写入以';'分隔的字符串中并将此字符串传递给ExecuteNonQuery?

检查错误只是比较插入数量与受影响的行ExecuteNonQuery返回