【问题标题】:Can I use SqlBulkCopy inside Transaction我可以在事务中使用 SqlBulkCopy
【发布时间】:2015-10-23 12:57:07
【问题描述】:

TransactionScope 中使用SqlBulkCopy 是否安全?我知道这个question 但它没有回答这个问题而且它已经很老了。如果不可能,有什么好的选择?

【问题讨论】:

    标签: c# sql transactions


    【解决方案1】:

    似乎如果TransactionScope 是在创建用于SqlBulkCopy 的sql-connection 之前创建并打开使用TransactionScope 的事务处理机制。这意味着您需要手动创建自己的 SqlConnection 并打开它,以便稍后用于 SqlBulkCopy 实例。

    using (var ts = new TransactionScope())
    using (var sqlCon = new SqlConnection(conStr))
    {
      sqlCon.Open(); // ensure to open it before SqlBulkCopy can open it in another transactionscope.
      using (var bulk = new SqlBulkCopy(sqlCon))
      {
        // Do you stuff
        bulk.WriteToServer...
      }      
    
      ts.Complete(); // finish the transaction, ie commit
    }
    

    注意 1: 在阅读了一些 TransactionScopeSqlTransaction 之后,大大改变了答案

    注意 2: 这个答案纯粹来自阅读,我目前还没有上述经验证据。

    注意 3: 自从我第一次回复以来,您所指的问题似乎有了新的答案,他给出的答案与我在这里的答案相同,所以我希望他有经验证据:)(即https://stackoverflow.com/a/33311494/691294

    【讨论】:

    • 如何从 TransactionScope 获取事务对象?
    • @Luke101 你不能轻易做到这一点,如果有的话,但似乎在TransactionScope 中打开你的SqlConnection 会做同样的事情。有关详细信息,请参阅我的更新答案。
    猜你喜欢
    • 1970-01-01
    • 2015-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-20
    • 1970-01-01
    相关资源
    最近更新 更多