DB2 V10.1 for Linux, UNIX, and Windows

DB2Transaction.Rollback 方法

从暂挂状态回滚事务。

名称空间:
IBM®.Data.DB2®
组合件:
IBM.Data.DB2(在 IBM.Data.DB2.dll 中)

语法

[Visual Basic]
NotOverridable Public Sub Rollback() Implements _
   IDbTransaction.Rollback
[C#]
public void Rollback();
[C++]
public: __sealed void Rollback();
[JScript]
public function Rollback();
实现:
IDbTransaction.Rollback

异常

异常类型 条件
Exception 尝试落实事务期间发生了错误。
InvalidOperationException 已落实或回滚事务。

-或者-

连接中断。

注释

只能从暂挂状态(在调用了 DB2Connection.BeginTransaction 之后,但是在调用 DB2Transaction.Commit 之前)回滚事务。

示例

[Visual Basic, C#] 以下示例将创建 DB2ConnectionDB2Transaction。它还会演示如何使用 DB2Connection.BeginTransactionDB2Transaction.CommitRollback 方法。

[Visual Basic]
Public Sub RunDB2Transaction(myConnString As String)
    Dim myConnection As New DB2Connection(myConnString)
    myConnection.Open()

    Dim myCommand As New DB2Command()
    Dim myTrans As DB2Transaction

    ' Start a local transaction
    myTrans = myConnection.BeginTransaction()
    ' Assign transaction object for a pending local transaction
    myCommand.Transaction = myTrans

    
    Try
        myCommand.CommandText = "Insert into org(
          DEPTNUMB, DEPTNAME, MANAGER, DIVISION,LOCATION)
          VALUES (100, 'Head Office', 160, 'Corporate', 'New York')"
        myCommand.ExecuteNonQuery()
        myCommand.CommandText = "Insert into org(
          DEPTNUMB, DEPTNAME, MANAGER, DIVISION,LOCATION)
          VALUES (101, 'New England', 50, 'Eastern', 'Boston')"
        myCommand.ExecuteNonQuery()
        myTrans.Commit()
        Console.WriteLine("Both records are written to database.")
    Catch e As Exception
        myTrans.Rollback()
        Console.WriteLine(e.ToString())
        Console.WriteLine("Neither record was written to database.")    Finally
        myConnection.Close()
    End Try
End Sub

[C#]
public void RunDB2Transaction(string myConnString)
{
   DB2Connection myConnection = new DB2Connection(myConnString);
   myConnection.Open();

   DB2Command myCommand = new DB2Command();
   DB2Transaction myTrans;

   // Start a local transaction
   myTrans = myConnection.BeginTransaction();
   // Assign transaction object for a pending local transaction
   myCommand.Transaction = myTrans;

   
   try
   {
     myCommand.CommandText = "Insert into org(
      DEPTNUMB, DEPTNAME, MANAGER, DIVISION,LOCATION)
      VALUES (100, 'Head Office', 160, 'Corporate', 'New York')";
     myCommand.ExecuteNonQuery();
     myCommand.CommandText = "Insert into org(
       DEPTNUMB, DEPTNAME, MANAGER, DIVISION,LOCATION)
       VALUES (101, 'New England', 50, 'Eastern', 'Boston')";
     myCommand.ExecuteNonQuery();
     myTrans.Commit();
     Console.WriteLine("Both records are written to database.");
   }
   catch(Exception e)
   {
     myTrans.Rollback();
     Console.WriteLine(e.ToString());
     Console.WriteLine("Neither record was written to database.");
   }
   finally
   {
     myConnection.Close();
   }
}