C# 将TransactionScope与System.Data.OracleClient一起使用-TransactionBortedException

C# 将TransactionScope与System.Data.OracleClient一起使用-TransactionBortedException,c#,transactions,oracle10g,transactionscope,C#,Transactions,Oracle10g,Transactionscope,我的系统在将数据写入Oracle(10g)数据库之前,先将一些数据写入SQL Server DB(2008),然后提取并进一步处理 我已将SQL Server交互打包在TransactionScope中,但当我尝试使用Oracle交互时,我得到了一个“TransactionAbortedException”(“事务已中止”) 卸下TransactionScope,一切正常 我可以随时恢复手动管理自己的事务,但我希望有一个简单的解决方案 示例代码: private static void Orac

我的系统在将数据写入Oracle(10g)数据库之前,先将一些数据写入SQL Server DB(2008),然后提取并进一步处理

我已将SQL Server交互打包在TransactionScope中,但当我尝试使用Oracle交互时,我得到了一个“TransactionAbortedException”(“事务已中止”)

卸下TransactionScope,一切正常

我可以随时恢复手动管理自己的事务,但我希望有一个简单的解决方案

示例代码:

private static void OracleTest()
    {           
        using (TransactionScope ts = new TransactionScope())
        {
            using (OracleConnection conn = new OracleConnection(connString))
            {
                try
                {
                    using (OracleCommand cmd = new OracleCommand())
                    {
                        cmd.CommandText = "MyPackage.MyFunction";
                        cmd.CommandType = System.Data.CommandType.StoredProcedure;
                        cmd.Connection = conn;

                        OracleParameter param = cmd.Parameters.Add(new OracleParameter("field1_", "abc123"));

                        param = cmd.Parameters.Add(new OracleParameter("rs_", OracleType.Cursor));
                        param.Direction = System.Data.ParameterDirection.Output;
                        conn.Open();
                        using (OracleDataReader dr = cmd.ExecuteReader())
                        {

我没有发现任何迹象表明您不能在Oracle上使用TransactionScopes,但正如您从我的示例中看到的,我们正处在第一个障碍(当我们打开连接时),因此很难看出我可能会出错。

您可能想看看这一点;我在Oracle 10g中的TransactionScope方面也不太走运: