我有以下代码:
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#中。
谢谢, 迈克尔
答案 0 :(得分:1)
也许这会解决你的问题:
编写Oracle PL / SQL过程来编写日志。此过程必须具有编译指示“AUTONOMOUS_TRANSACTION”。然后调用此过程而不是直接插入。