2011-03-14 101 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語句。