首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#执行多条SQL语句

C#执行多条SQL语句
EN

Stack Overflow用户
提问于 2013-06-07 14:16:52
回答 2查看 1.1K关注 0票数 7

我有一个存储update语句的类。我不能在并行for循环中执行这些语句,因为这会导致死锁。

这些语句在循环完成后执行,在一个100行的场景中,它可以正常工作。但是某些场景会生成超过100,000语句。在顺序循环上执行这些语句需要花费太长时间。

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

我对多线程很陌生。这能实现吗?如果不是,我应该使用什么其他选项来减少执行时间。请注意,我不能更改语句逻辑,因为它附带了许多其他因素。

让我进一步澄清我的设想。我拥有的这个表更像是一个日志表,它跟踪转移到客户端的sql行,这样我就不会两次重新发送同一个对象。这是为了减少带宽的使用,因为对象是通过互联网链路转移。

从一开始,当我收到客户端的回复时,我正在执行每个语句。当循环是连续的,但被证明太慢的时候,这是非常有效的。所以我选择使用并行循环。在这里,所有问题都是在选择、插入和更新同一表时出现的,几乎同时导致死锁。

因此,我决定将这些语句保存在一个字符串列表中,以便稍后执行。

我尝试使用string.join将所有字符串转换为单个字符串,但这使系统出现内存异常。因此,它们逐个执行。现在转移需要5分钟,执行需要30分钟。所以我想找个解决办法..。

EN

回答 2

Stack Overflow用户

发布于 2013-06-07 14:24:47

因为听起来您一直在不断地将新内容插入到数据库中,所以您可以使用SqlTransaction,在该SqlTransaction上,只要语句可用,就执行它们。然后,偶尔提交事务。

有关如何使用它的示例,请查看MSDN

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

票数 2
EN

Stack Overflow用户

发布于 2013-06-07 14:25:24

我已经成功地将SQLBulkCopy应用到临时表中,然后针对该表执行更新(实际上是合并,但原则相同)。

我们只剩下5分钟的批次了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16986326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档