经过长时间学习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.ClientOracle.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 程序中设置事务保存点
正如本文前面所提到的那样,您可以设置一个保存点,以便将事务回滚至该特定的点,同时保持事务中的其他语句原封不动。您可以使用 OracleTransaction 类的 Save() 方法在事务中设置保存点。
如果您有一个非常长的事务并且希望能够仅回滚到某个特定的时间点,那么您可能要使用保存点。例如,您可能想对 10 个产品做一些更改,然后设置一个保存点,然后再对另 10 个产品做更改;如果您在进行第二批更改时出现了错误,那么您可以回滚至保存点,使您的***批更改原封不动。
VB.NET使用OracleTransaction对象需要注意的几点:
1)你需要在你整个事务执行中只能有***OracleConnection ,OracleCommand,OracleTransaction,也就是说如果你事务处理过程中如果需要与数据库的操作都只能在这***的Command中执行,类似于:
- imgCommand.CommandText = sSQL
- imgCommand.ExecuteNonQuery()或其他操作
若你新建一个连接执行其他数据库操作的话,整个事务过程就会抛出异常
2)如果你需要在你SQL语句中加入参数,则你必须在你执行完提交或相关数据库操作之后将其Command的参数清空。
【编辑推荐】