
VB.NET使用OracleTransaction处理事务
发布时间:2006-08-10 09:14:45 来源:博客园 网友评论 0 条
数据库事务简介
数据库事务是由一组 SQL 语句组成的一个逻辑工作单元。您可以把事务看作是一组不可分的 SQL 语句,这些语句作为一个整体永久记录在数据库中或一并撤销。比如在银行帐户之间转移资金:一条 UPDATE语句将从一个帐户的资金总数中减去一部分,另一条 UPDATE语句将把资金加到另一个帐户中。减操作和加操作必须永久记录在数据库中,或者必须一并撤销 — 否则将损失资金。这个简单的示例仅使用了两条 UPDATE 语句,但一个更实际的事务可能包含许多 INSERT、UPDATE和 DELETE 语句。
要永久记录一个事务中的 SQL 语句的结果,您可以通过 COMMIT 语句来执行提交。要撤销 SQL 语句的结果,您可以使用 ROLLBACK 语句来执行回滚,这会把所有的行重设为它们原来的状态。只要您事先没有与数据库断开,则您在执行回滚之前所做的任何修改都将被撤销。您还可以设置一个保存点,以便将事务回滚至该特定的点,同时保持事务中的其他语句原封不动。
使用数据库事务(主要针对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。示例程序就用到了这些类。
事务操作
在 .NET 程序中设置事务保存点
正如本文前面所提到的那样,您可以设置一个保存点,以便将事务回滚至该特定的点,同时保持事务中的其他语句原封不动。您可以使用 OracleTransaction 类的 Save() 方法在事务中设置保存点。
如果您有一个非常长的事务并且希望能够仅回滚到某个特定的时间点,那么您可能要使用保存点。例如,您可能想对 10 个产品做一些更改,然后设置一个保存点,然后再对另 10 个产品做更改;如果您在进行第二批更改时出现了错误,那么您可以回滚至保存点,使您的第一批更改原封不动。
使用OracleTransaction对象需要注意的几点:
1)你需要在你整个事务执行中只能有唯一OracleConnection ,OracleCommand,OracleTransaction,也就是说如果你事务处理过程中如果需要与数据库的操作都只能在这唯一的Command中执行,类似于:
若你新建一个连接执行其他数据库操作的话,整个事务过程就会抛出异常
2)如果你需要在你SQL语句中加入参数,则你必须在你执行完提交或相关数据库操作之后将其Command的参数清空,下边举一个实际的项目里的事务函数:
事务函数
数据库事务是由一组 SQL 语句组成的一个逻辑工作单元。您可以把事务看作是一组不可分的 SQL 语句,这些语句作为一个整体永久记录在数据库中或一并撤销。比如在银行帐户之间转移资金:一条 UPDATE语句将从一个帐户的资金总数中减去一部分,另一条 UPDATE语句将把资金加到另一个帐户中。减操作和加操作必须永久记录在数据库中,或者必须一并撤销 — 否则将损失资金。这个简单的示例仅使用了两条 UPDATE 语句,但一个更实际的事务可能包含许多 INSERT、UPDATE和 DELETE 语句。
要永久记录一个事务中的 SQL 语句的结果,您可以通过 COMMIT 语句来执行提交。要撤销 SQL 语句的结果,您可以使用 ROLLBACK 语句来执行回滚,这会把所有的行重设为它们原来的状态。只要您事先没有与数据库断开,则您在执行回滚之前所做的任何修改都将被撤销。您还可以设置一个保存点,以便将事务回滚至该特定的点,同时保持事务中的其他语句原封不动。
使用数据库事务(主要针对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。示例程序就用到了这些类。
事务操作
| 1Public Sub RunOracleTransaction()Sub RunOracleTransaction(myConnString As String) 2 Dim myConnection As New OracleConnection(myConnString) 3 myConnection.Open() 4 5 Dim myCommand As OracleCommand = myConnection.CreateCommand() 6 Dim myTrans As OracleTransaction 7 8 ' Start a local transaction 9 myTrans = myConnection.BeginTransaction(IsolationLevel.ReadCommitted) 10 ' Assign transaction object for a pending local transaction 11 myCommand.Transaction = myTrans 12 13 Try 14 myCommand.CommandText = "INSERT INTO Dept (DeptNo, Dname, Loc) values (50, 'TECHNOLOGY', 'DENVER')" 15 myCommand.ExecuteNonQuery() 16 myCommand.CommandText = "INSERT INTO Dept (DeptNo, Dname, Loc) values (60, 'ENGINEERING', 'KANSAS CITY')" 17 myCommand.ExecuteNonQuery() 18 myTrans.Commit() 19 Console.WriteLine("Both records are written to database.") 20 Catch e As Exception 21 myTrans.Rollback() 22 Console.WriteLine(e.ToString()) 23 Console.WriteLine("Neither record was written to database.") 24 Finally 25 myConnection.Close() 26 End Try 27End Sub 28 |
在 .NET 程序中设置事务保存点
正如本文前面所提到的那样,您可以设置一个保存点,以便将事务回滚至该特定的点,同时保持事务中的其他语句原封不动。您可以使用 OracleTransaction 类的 Save() 方法在事务中设置保存点。
如果您有一个非常长的事务并且希望能够仅回滚到某个特定的时间点,那么您可能要使用保存点。例如,您可能想对 10 个产品做一些更改,然后设置一个保存点,然后再对另 10 个产品做更改;如果您在进行第二批更改时出现了错误,那么您可以回滚至保存点,使您的第一批更改原封不动。
使用OracleTransaction对象需要注意的几点:
1)你需要在你整个事务执行中只能有唯一OracleConnection ,OracleCommand,OracleTransaction,也就是说如果你事务处理过程中如果需要与数据库的操作都只能在这唯一的Command中执行,类似于:
| imgCommand.CommandText = sSQL imgCommand.ExecuteNonQuery()或其他操作 |
若你新建一个连接执行其他数据库操作的话,整个事务过程就会抛出异常
2)如果你需要在你SQL语句中加入参数,则你必须在你执行完提交或相关数据库操作之后将其Command的参数清空,下边举一个实际的项目里的事务函数:
事务函数
| 1 ''' <summary> 2 ''' 保存热点文本文件信息到数据库 3 ''' </summary> 4 Private Function SaveTextFile()Function SaveTextFile() As Boolean 5 Dim sSQl As String 6 sSQl = "select type_id from sys_file_type where file_extname='TXT'" 7 Try 8 imgCommand.CommandText = sSQl 9 Dim typeID As Int32 = Convert.ToInt32(imgCommand.ExecuteScalar()) '文件类型 10 '读取文本信息 11 Dim Textblob() As Byte = GetText() 12 13 sSQl = "insert into t_watch_textcontent(image_id,text_content,type_id) values(:imageid,:textcontent,:typeid)" 14 '增添SQL参数 15 Dim Param As OracleClient.OracleParameter 16 Param = New OracleClient.OracleParameter("imageid", sNewImageID) 17 imgCommand.Parameters.Add(Param) 18 Param = New OracleClient.OracleParameter("textcontent", Textblob) 19 imgCommand.Parameters.Add(Param) 20 Param = New OracleClient.OracleParameter("typeid", typeID) 21 imgCommand.Parameters.Add(Param) 22 23 '提交信息 24 imgCommand.CommandText = sSQl 25 If imgCommand.ExecuteNonQuery() > 0 Then 26 bResult = True 27 '关键是这里,需要你手动清除参数 28 imgCommand.Parameters.Clear() 29 End If 30 Catch ex As Exception 31 Me.ExceptionMessage = ex 32 bResult = False 33 End Try 34 35 Return bResult 36 End Function |
推荐阅讯
- 让Visual Basic应用程序支持鼠标滚轮
- VB COM基础讲座之创建测试程序
- Visual Basic6.0事件机制分析
- VB实现文字“闪入”显示的特殊效果
- VB图像处理之二次线性插值的应用
- 给用和学VB的朋友打打气,同时分享创业故事
- VB设计能自动存盘的记事本
- P2P的简单示例(VB.net版)
- VB中使用WinSock控件编写网络程序
- Visual baisc中Byval与Byref的区别
阅读排行
- 1.通过实例学VB—创建简单的个人通讯录
- 2.如何编写高质量的VB代码
- 3.在VB的ListView控件中动态加载记录
- 4.用VB备份和恢复SQL Server数据库的方法
- 5.利用VB学做“黑客”程序
- 6.掌握VB中的ADO数据对象编程
- 7.将程序加入启动组
- 8.VB程序中用ADO对象动态创建数据库和表
- 9.VB与Excel2000实现复杂报表打印
- 10.六天学会Visual Basic数据库编程
专题教程
- 大话G游 专题:手机病毒揭密
- ARP攻击防范与解决方案 路由故障处理手册
- Picasa中文版_Picasa教程 专题:清除流氓软件
- Firefox专题 seo搜索引擎优化专区
- 重装Windows必知的事情 装机之必备软件大行动
病毒专杀栏
