C#执行多个SQL语句

我有一个存储更新语句的类。 我无法在我的parallel for循环中执行这些语句,因为这会导致死锁。

这些语句在循环完成后执行,在100行的情况下它可以正常工作。 但某些场景会产生超过100,000条语句。 在顺序循环上执行这些语句需要很长时间。

我希望实现的是,在向类中添加100个语句时,我在一个单独的线程上执行这些语句,并清除语句变量,以便可以添加和执行下一个100语句。

我是多线程新手。 这是可以实现的吗? 如果不是我使用其他选项来减少执行时间。 请注意,我不能更改语句逻辑,因为附加了很多其他因素。

让我进一步澄清我的情况。 我拥有的表更多的是一个日志表,它跟踪将sql行转移到客户端,以便我不重复发送同一个对象两次。 这是为了减少带宽使用量,因为通过互联网链接传输对象。

最初,我一收到客户的回复就执行了每条语句。 当循环顺序时,这很有效,但被证明太慢了。 所以我选择使用并行for循环。 这是所有问题出现的地方,因为同一张桌子几乎同时被选中,插入和更新导致死锁。

所以我决定将这些语句保存在稍后执行的字符串列表中。

我试图使用string.join将所有字符串转换为单个字符串,但这给了我系统内存异常。 从而逐个依次执行它们。 现在转移需要5分钟,执行30分钟。 所以我正在寻找这个解决方案..


既然听起来像你不断地获取插入到数据库的新东西,你可以使用SqlTransaction ,在你可以使用的时候执行你的语句。 然后,偶尔您进行交易。

查看MSDN关于如何使用它的例子。

编辑:如果你另一方面得到大量的语句在一个堆中执行,如果可能的话使用SqlBulkCopy,就像LoztInSpace所说的那样。


我在使用SQLBulkCopy到临时表中取得了巨大的成功,然后对它执行UPDATE(实际上是MERGE,但是原理相同)。

我们得到了一个5分钟的批量下降到几秒钟。

链接地址: http://www.djcxy.com/p/14053.html

上一篇: C# Execute Multiple SQL Statements

下一篇: Timeouts refreshing Google oauth token in GAE app