从暂挂状态回滚事务。
[Visual Basic]
NotOverridable Public Sub Rollback() Implements _
IDbTransaction.Rollback
[C#]
public void Rollback();
[C++]
public: __sealed void Rollback();
[JScript]
public function Rollback();
| 异常类型 | 条件 |
|---|---|
| Exception | 尝试落实事务期间发生了错误。 |
| InvalidOperationException | 已落实或回滚事务。 -或者- 连接中断。 |
只能从暂挂状态(在调用了 DB2Connection.BeginTransaction 之后,但是在调用 DB2Transaction.Commit 之前)回滚事务。
[Visual Basic, C#] 以下示例将创建 DB2Connection 和 DB2Transaction。它还会演示如何使用 DB2Connection.BeginTransaction、DB2Transaction.Commit 和 Rollback 方法。
[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();
}
}