将TransactionScope与System.Data.OracleClient一起使用 - TransactionAbortedException

时间:2010-08-16 15:56:26

标签: c# transactions oracle10g transactionscope

我的系统将一些数据写入SQL Server数据库(2008),稍后将其提取并进行处理,然后再将其写入Oracle(10g)数据库。

我已经在TransactionScope中包装了我的SQL Server交互,但是当我尝试使用我的Oracle交互时,我得到一个`TranactionAbortedException - “事务已中止”。

删除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的东西,但正如你从我的例子中看到的那样,我们正处于第一道障碍(当我们打开连接时),所以很难看到我可能会出错的地方。

1 个答案:

答案 0 :(得分:4)

你可能想看看这个;我对Oracle 10g中的TransactionScope运气不错:http://forums.oracle.com/forums/thread.jspa?messageID=4127323