立即在transactioncope中提交一些oracle更改?

时间:2015-01-09 12:06:07

标签: c# oracle transactions transactionscope

我有以下代码:

using (TransactionScope tran = new TransactionScope())
{
   try
   {
       OracleConnection _transactionDB = new OracleConnection("ConnectionString");
       _transactionDB.Open();

       OracleCommand _command = new OracleCommand();
       _command.Connection = _transactionDB;
       _command.CommandType = CommandType.Text;
       _command.CommandText = "INSERT INTO table (id, text) VALUES (3, 'test')";
       int rowsAffected = _command.ExecuteNonQuery();

       OracleCommand _command2 = new OracleCommand();
       _command2.Connection = _transactionDB;
       _command2.CommandType = CommandType.Text;
       _command2.CommandText = "INSERT INTO log (id, text) VALUES (3, 'Success')";
       int rowsAffected2 = _command2.ExecuteNonQuery();

       //...some other actions(DB changes)
   }
}

是否有立即提交第二个插入的解决方案,如果transactioncope失败也无关紧要?此插入应始终在数据库中可见,以便更轻松地查看此事务中发生的情况。

在oracle中有一个'AUTONOMOUS_TRANSACTION Pragma',就像我需要的函数一样,在C#中。

谢谢, 迈克尔

1 个答案:

答案 0 :(得分:1)

也许这会解决你的问题:

编写Oracle PL / SQL过程来编写日志。此过程必须具有编译指示“AUTONOMOUS_TRANSACTION”。然后调用此过程而不是直接插入。