讲述VB.NET使用OracleTransaction对象

在向大家详细介绍VB.NET使用OracleTransaction对象之前,首先让大家了解下数据库事务是什么和使用数据库事务。

数据库事务是由一组 SQL 语句组成的一个逻辑工作单元。您可以把事务看作是一组不可分的 SQL 语句,这些语句作为一个整体永久记录在数据库中或一并撤销。比如在银行帐户之间转移资金:一条 UPDATE语句将从一个帐户的资金总数中减去一部分,另一条 UPDATE语句将把资金加到另一个帐户中。减操作和加操作必须永久记录在数据库中,或者必须一并撤销 ― 否则将损失资金。这个简单的示例仅使用了两条 UPDATE 语句,但一个更实际的事务可能包含许多 INSERT、UPDATE和 DELETE 语句。

要永久记录一个事务中的 SQL 语句的结果,您可以通过 COMMIT 语句来执行提交。要撤销 SQL 语句的结果,您可以使用 ROLLBACK 语句来执行回滚,这会把所有的行重设为它们原来的状态。只要您事先没有与数据库断开,则您在执行回滚之前所做的任何修改都将被撤销。您还可以设置一个保存点,以便将事务回滚至该特定的点,同时保持事务中的其他语句原封不动。

使用数据库事务(主要针对VB.net)

VB.NET使用OracleTransaction对象来表示一个事务。OracleTransaction 类包含多个属性,其中的两个为 Connection(指定与事务关联的数据库连接)和 IsolationLevel(指定事务隔离级别)

Connection,指定与该事务关联的OracleConnection对象;
IsolationLevel,指定该事务的IsolationLevel;枚举类型,用于对事物的锁定,取值有Chaos、 ReadCommited、ReadUncommited、RepeatableRead、Serializable、Unspecified。

应用程序通过针对OracleConnection对象调用 BeginTransaction 来创建OracleTransaction对象。对OracleTransaction对象执行与该事务关联的所有后续操作(例如提交或中止该事务)。

Commit:提交SQL数据库事务;
Rollback :从挂起状态回滚事务;

您还可以使用 Save() 在事务中设置一个保存点。

下面的示例创建一个 OracleConnection 和一个 OracleTransaction。它还演示了如何使用 BeginTransaction、Commit 和 Rollback 方法。(这是MSDN里的范例)

需要注意的是,这些操作需要引入命名空间: Oracle.DataAcess.Client

Oracle.DataAccess.Client 命名空间是 ODP.NET 的一部分,它包含许多类,其中有 OracleConnection、OracleCommand 和 OracleTransaction。示例程序就用到了这些类。

事务操作

Public Sub RunOracleTransaction()Sub RunOracleTransaction(myConnString As String)  


Dim myConnection As New OracleConnection(myConnString)  


myConnection.Open()  


 



Dim myCommand As OracleCommand = myConnection.CreateCommand()  



Dim myTrans As OracleTransaction  


 


' Start a local transaction  



myTrans = myConnection.BeginTransaction(IsolationLevel.ReadCommitted)  



' Assign transaction object for a pending local transaction  



myCommand.Transaction = myTrans 



 


Try  



myCommand.CommandText = "INSERT INTO Dept (DeptNo, Dname, Loc) values (50, 'TECHNOLOGY', 'DENVER')" 



myCommand.ExecuteNonQuery()  



myCommand.CommandText = "INSERT INTO Dept (DeptNo, Dname, Loc) values (60, 'ENGINEERING', 'KANSAS CITY')" 



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 

在 .NET 程序中设置事务保存点

相关推荐