.net - 是否可以在多个程序之间共享 SQL Server 事务?

标签 .net sql-server distributed-transactions

我有一个案例,我需要以下序列用于我们的内部工具,这些工具必须协同工作以准备用于测试目的的数据库。

  • program1启动、开始数据库事务并退出
  • program2启动并加入同一个数据库事务,执行一堆语句并退出
  • program3还启动并加入同一个数据库事务,执行一堆语句并退出
  • program4开始并决定是否/何时回滚事务

  • 这些程序是 .Net 命令行应用程序。
    我研究了 MSDTC/TransctionScope但我找不到任何程序启动事务然后退出同时让事务打开以供其他程序加入的情况。
    这是可行的吗?

    编辑(可能的解决方案):
    我测试了 sp_getbindtoken / sp_bindsession 它会起作用:program1会这样做(在 .Net 代码中)
    begin transaction
    DECLARE @bind_token varchar(255);  
    EXECUTE sp_getbindtoken @bind_token OUTPUT; 
    print @bind_token
    
    并返回/写入 bind_token到其他程序可以获取 token 并加入交易的文件:
    sp_bindsession ':7:FliJ.4AShUOIOjb<6^]5---0aE=--'
    //Do stuff
    rollback transaction
    
    但是program1必须在整个过程中保持事件状态才能在其他程序加入/离开 session 时保持 session 事件。
    这个 api 的文档指出:

    This feature is in maintenance mode and may be removed in a future version of Microsoft SQL Server. Avoid using this feature in new development work, and plan to modify applications that currently use this feature.

    最佳答案

    SQL 事务被锁定到它们的连接。不能通过多个应用程序共享连接。

    然而,实现您的目标的一种方法是将来自所有应用程序的查询代理到实际保存连接及其事务的单个应用程序。

    关于.net - 是否可以在多个程序之间共享 SQL Server 事务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51791689/

    相关文章:

    sql - MS SQL Server,多次插入

    sql-server - 如何在SQL Server 2008 Express中更改sa密码?

    sql - 如何正确创建索引

    java - 找出缺陷!使用任务队列可靠地执行长任务

    c# - 一种在监 window 口中获取对象并将其设为 "Script"的方法

    c# - 子任务与 WaitAll

    c# - 防止无效的文本框输入绑定(bind)到业务对象属性?

    .net - NServiceBus 与 MassTransit

    jakarta-ee - 访问容器管理的 bean 中的事务状态

    spring-boot - 在Spring Boot/Spring Batch应用程序上配置Atomikos的问题