立即提交 transactionscope 中的一些 oracle 更改?
Commit some oracle changes in transactionscope immediately?
我有以下代码:
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)
}
}
是否有立即提交第二个插入的解决方案,无论事务范围是否失败都无关紧要?这个插入在数据库中应该总是可见的,以便更容易地看到这个事务中发生了什么。
在oracle中有一个'AUTONOMOUS_TRANSACTION Pragma',就像我需要的函数,在C#中。
谢谢,
迈克尔
也许这会解决你的问题:
写一个Oracle PL/SQL程序写日志。这个过程必须有 pragma "AUTONOMOUS_TRANSACTION"。然后调用这个过程而不是直接插入。
我有以下代码:
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)
}
}
是否有立即提交第二个插入的解决方案,无论事务范围是否失败都无关紧要?这个插入在数据库中应该总是可见的,以便更容易地看到这个事务中发生了什么。
在oracle中有一个'AUTONOMOUS_TRANSACTION Pragma',就像我需要的函数,在C#中。
谢谢, 迈克尔
也许这会解决你的问题:
写一个Oracle PL/SQL程序写日志。这个过程必须有 pragma "AUTONOMOUS_TRANSACTION"。然后调用这个过程而不是直接插入。