我一直在尝试为Oracle复制SQLConnection.BeginTransaction(String TransactionName)。有一个类OracleConnection.BeginTransaction,但我无法找到该方法的重载,以指定需要使用的事务的名称。任何帮助,将不胜感激。Oracle等效于SQLConnection.BeginTransaction(字符串TransactionName)
在此先感谢
我一直在尝试为Oracle复制SQLConnection.BeginTransaction(String TransactionName)。有一个类OracleConnection.BeginTransaction,但我无法找到该方法的重载,以指定需要使用的事务的名称。任何帮助,将不胜感激。Oracle等效于SQLConnection.BeginTransaction(字符串TransactionName)
在此先感谢
您可以将一个事务与一个Command对象相关联。当该命令将被执行时,连接将在该事务的上下文中运行。
还有一个Connection交易对象的属性,您可以用它来指定与交易相关的连接。
参见本实施例中从MSDN:
using (OracleConnection connection = new OracleConnection(connectionString))
{
connection.Open();
OracleCommand command = connection.CreateCommand();
OracleTransaction transaction;
// Start a local transaction
transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted);
// Assign transaction object for a pending local transaction
command.Transaction = transaction;
try
{
command.CommandText =
"INSERT INTO Dept (DeptNo, Dname, Loc) values (50, 'TECHNOLOGY', 'DENVER')";
command.ExecuteNonQuery();
command.CommandText =
"INSERT INTO Dept (DeptNo, Dname, Loc) values (60, 'ENGINEERING', 'KANSAS CITY')";
command.ExecuteNonQuery();
transaction.Commit();
Console.WriteLine("Both records are written to database.");
}
catch (Exception e)
{
transaction.Rollback();
Console.WriteLine(e.ToString());
Console.WriteLine("Neither record was written to database.");
}
}
目的OracleTransaction不具有返回“名”的任意字符串构件。 我认为这是要面对的主要问题。
OracleConnection.BeginTransaction()返回一个OracleTransaction对象,所以我无法确定它应该如何为事务分配一个名称。
我希望它有帮助。
您可能能够从DbConnection类继承并创建自己的BeginTransaction()方法的重载。然后,您必须从DbTransaction类继承来创建您自己的Commit()和Rollback()方法的重载。然后与DbProviderFactory和DbCommand对象一起使用。
嗯..我会试试看..谢谢.. – Nemo 2011-03-14 13:10:29
我想你可能需要在启动事务之前执行带有NAME参数的SET TRANSACTION SQL语句。
问题是关于交易的名称,而不是它的连接 – onof 2015-08-03 11:54:07