C# 不同的数据库连接能否在Oracle中更新同一事务?

C# 不同的数据库连接能否在Oracle中更新同一事务?,c#,oracle,asp.net-web-api,transactions,C#,Oracle,Asp.net Web Api,Transactions,我想我知道答案,但值得一试 我有一大块plsql。这一切都包装在一个事务中。我想将其中的一部分迁移到内部web服务(mvc.net/entity) 但当然,事务没有提交,因此服务无法更新它想要的记录 如果调用服务的plsql能够将事务、事务名称、上下文、连接等传递给服务,并且服务能够返回它以进行进一步的更改,这当然是件好事 实际上,事务从.net/wpf开始,进入plsql,并在wfp中返回和提交。因此,我们的想法是在wpf中启动一个事务,转到plsql,它调用一个服务,返回plsql,然后返回

我想我知道答案,但值得一试

我有一大块plsql。这一切都包装在一个事务中。我想将其中的一部分迁移到内部web服务(mvc.net/entity)

但当然,事务没有提交,因此服务无法更新它想要的记录

如果调用服务的plsql能够将事务、事务名称、上下文、连接等传递给服务,并且服务能够返回它以进行进一步的更改,这当然是件好事


实际上,事务从.net/wpf开始,进入plsql,并在wfp中返回和提交。因此,我们的想法是在wpf中启动一个事务,转到plsql,它调用一个服务,返回plsql,然后返回wpf并提交。我们可以将plsql分成两部分,这样.net就可以调用plsql和服务,然后在plsql中恢复事务,稍后在.net中提交

我有一个类似的需求,但我正在更新多个数据库,需要一个事务来提交或回滚所有适当的内容。我最终使用了
System.Transactions
命名空间并创建了一个
TransactionScope
。我必须从我的Oracle驱动程序中安装一个组件,但我非常确定这就是所需要的。这将允许您从WPF解决方案控制事务,并调用所需的任何内容

没有“Rollback”语句,不调用
Complete()
方法将在using语句末尾自然回滚事务

using (var trans = new TransactionScope(TransactionScopeOption.RequiresNew))
{
    var cn  = new OracleConnection();
    // perform PL/SQL

    if (success())
    {
        // this is the "Commit"
        trans.Complete();
    }
}

有关更多详细信息,请参阅。

我有类似的要求,但我正在更新多个数据库,需要一个事务来提交或回滚所有内容。我最终使用了
System.Transactions
命名空间并创建了一个
TransactionScope
。我必须从我的Oracle驱动程序中安装一个组件,但我非常确定这就是所需要的。这将允许您从WPF解决方案控制事务,并调用所需的任何内容

没有“Rollback”语句,不调用
Complete()
方法将在using语句末尾自然回滚事务

using (var trans = new TransactionScope(TransactionScopeOption.RequiresNew))
{
    var cn  = new OracleConnection();
    // perform PL/SQL

    if (success())
    {
        // this is the "Commit"
        trans.Complete();
    }
}

有关更多详细信息,请参阅。

查看。我从未使用过它,但根据文档“使用此软件包,应用程序开发人员可以使用PL/SQL在SQL*Plus会话或进程之间切换或共享事务。”谢谢-我们的DBA怀疑地看着我,但这似乎是一个可能的解决方案。如果我们最终将挂起的会话从plsql填充到.net,然后再填充回来,我会继续跟进。看一看。我从未使用过它,但根据文档“使用此软件包,应用程序开发人员可以使用PL/SQL在SQL*Plus会话或进程之间切换或共享事务。”谢谢-我们的DBA怀疑地看着我,但这似乎是一个可能的解决方案。如果我们最终将挂起的会话从plsql填充到.net再填充回来,我将继续。