2011-03-14 102 views

回答

-1

您可以将一个事务与一个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."); 
    } 
} 
+0

问题是关于交易的名称,而不是它的连接 – onof 2015-08-03 11:54:07

-1

目的OracleTransaction不具有返回“名”的任意字符串构件。 我认为这是要面对的主要问题。

OracleConnection.BeginTransaction()返回一个OracleTransaction对象,所以我无法确定它应该如何为事务分配一个名称。

我希望它有帮助。

0

您可能能够从DbConnection类继承并创建自己的BeginTransaction()方法的重载。然后,您必须从DbTransaction类继承来创建您自己的Commit()和Rollback()方法的重载。然后与DbProviderFactory和DbCommand对象一起使用。

+0

嗯..我会试试看..谢谢.. – Nemo 2011-03-14 13:10:29

1

我想你可能需要在启动事务之前执行带有NAME参数的SET TRANSACTION SQL语句。