文章导航PC6首页软件下载单机游戏安卓资源苹果资源

pc软件新闻网络操作系统办公工具编程服务器软件评测

安卓新闻资讯应用教程刷机教程安卓游戏攻略tv资讯深度阅读综合安卓评测

苹果ios资讯苹果手机越狱备份教程美化教程ios软件教程mac教程

单机游戏角色扮演即时战略动作射击棋牌游戏体育竞技模拟经营其它游戏游戏工具

网游cf活动dnf活动lol周免英雄lol礼包

手游最新动态手游评测手游活动新游预告手游问答

您的位置:首页技术开发.Net 专栏 → VB.NET使用数据库OracleTransaction处理事务

VB.NET使用数据库OracleTransaction处理事务

时间:2009/1/16 14:44:00来源:本站整理作者:我要评论(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。示例程序就用到了这些类。

  事务操作

 

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

相关视频

    没有数据

相关阅读 listary使用教程 listary的使用技巧iPhone数据迁移怎么用 iOS 12.4数据迁移功能使用教程地球防卫军5载具怎么操作 地球防卫军5载具使用操作方法iqoo neo和iqoo哪个好 iqoo neo和iqoo对比一览iqoo neo手机发布会直播地址 iqoo neo发布会直播网址Soundflower怎么使用 Soundflower使用教程iPadOS beta 2下载 iPadOS beta 2固件下载地址iOS 13 beta 2下载 iOS 13 beta 2固件下载地址

文章评论
发表评论

热门文章 没有查询到任何记录。

最新文章 什么是.NET中的TDD?ASP.NET AJAX入门简介 WebMatrix入门教程VC++2008中如何调用GetOpenFileName打开文件PlaySound函数在VC++6.0中如何播放音乐及声请问VC++回调函数怎么用

人气排行 嵌入式实时操作系统VxWorks入门教程ArrayList 与 string、string[] 的转换C#遍历整个文件夹及子目录的文件代码WebMatrix入门教程asp.net判断文件或文件夹是否存在c#判断数据NULL值的方法vc++6.0怎么写Windows简单窗口代码.net解决数据导出excel时的格式问题