【问题标题】:How can I implement a MultiThreaded Transaction in C#?如何在 C# 中实现多线程事务?
【发布时间】:2009-12-08 12:19:47
【问题描述】:

我想以事务的方式在不同的表上并行运行一组不同的命令,我该怎么做?

更多细节:

我希望所有命令都分布在线程上,但在一个事务中,所以如果所有线程都成功,我将提交其他回滚。

【问题讨论】:

  • 这些是什么命令?您通常会从批处理操作中获得比使用分布式事务更多的好处。如果这些只是插入,最好只使用批量插入。
  • 我有不同的表,我已经使用批量插入(SqlBulkCopy 类)为每个表执行插入,但目前它们是串行执行的,所以我试图并行执行它们并保持事务性行为。

标签: c# sql-server multithreading transactions


【解决方案1】:

将 TransactionScope 类与 DependentTransactions 一起使用。请参阅http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.aspxhttp://msdn.microsoft.com/en-us/library/system.transactions.dependenttransaction.aspx

这很可能会使用 DTC,因此请确保您也掌握了这一点。

【讨论】:

    【解决方案2】:

    典型的数据库连接无法处理多线程使用,因此您不应尝试这样做。

    相反,您可以查看DTC,它允许多个数据库连接在单个事务中协作。不过它会带来一些开销,因此您应该看看是否真的获得了您想要的多线程优势。

    【讨论】:

    • 这意味着.Net没有办法做到这一点??
    • 我没有这么说,我的意思是您需要的不仅仅是数据库连接对象和多线程代码。
    • Ahmed,这更多是关于 MSQL 服务器支持的内容,而不是 .NET - 它与使用 ODBC 驱动程序的任何语言相同。
    【解决方案3】:

    我想运行一组不同的 不同表上的命令 并行且以交易方式, 我该怎么做?

    从线程 #1:打开连接、启动事务、发出命令、提交事务。

    从线程 #2:打开连接、启动事务、发出命令、提交事务

    【讨论】:

    • 我希望所有命令都分布在线程上,但在单个事务中,全有或全无
    猜你喜欢
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    • 1970-01-01
    • 2011-12-28
    • 1970-01-01
    • 2023-03-03
    • 2012-06-27
    • 1970-01-01
    相关资源
    最近更新 更多