vb中提交事务(整理)

  • Post author:
  • Post category:其他


利用Connect对象的事务方法(必须为

服务
器端游标)

BeginTrans   启动新的事务,之后任何改变不会立即提交

CommitTrans   保存所有更改并结束当前事务。它也可以启动新事务。

RollbackTrans   取消当前事务中所做的任何更改并结束事务。它也可以启动新事务。

用法:打开连接后,对连接执行BeginTrans方法,之后按你的需求更改数据,

保存时调用连接的CommitTrans方法,在这之前利用On   Error   Goto,保存数据出错时跳转至错误处理部分,在其中执行连接的RollbackTrans方法,即可取消更改

BeginTrans、CommitTrans   和   RollbackTrans   方法   (ADO)

这些事务方法按如下方式

管理
  Connection   对象中所处理的事务:

BeginTrans   启动新的事务。

CommitTrans   保存所有更改并结束当前事务。它也可以启动新事务。

RollbackTrans   取消当前事务中所做的任何更改并结束事务。它也可以启动新事务。

语法

level   =   object.BeginTrans()

object.BeginTrans

object.CommitTrans

object.RollbackTrans

返回值

BeginTrans   可以作为函数调用,用于返回指示事务嵌套层次的长整型变量。

参数

object       Connection   对象。

Connection

如果希望以独立单元保存或取消对源数据所做的一系列更改,请使用这些具有   Connection   对象的方法。例如在货币转帐时,必须从帐户中减去某个数额并将其对等数额添加到另一个帐户。无论其中的哪个更新失败,都将导致帐户收支不平衡。在打开的事务中进行这些更改可确保只能选择进行全部更改或不作任何更改。

注意       并非所有提供者都支持事务。需验证提供者定义的属性   Transaction   DDL   是否出现在   Connection   对象的   Properties   集合中,如果在则表示提供者支持事务。如果提供者不支持事务,调用其中的某个方法将返回错误。

一旦调用了   BeginTrans   方法,在调用   CommitTrans   或   RollbackTrans   结束事务之前提供者将不再立即提交所做的任何更改。

对于支持嵌套事务的提供者来说,调用已打开事务中的   BeginTrans   方法将开始新的嵌套事务。返回值将指示嵌套层次:返回值为   1   表示已打开顶层事务(即事务不被另一个事务所嵌套),返回值为   2   表示已打开第二层事务(嵌套在顶层事务中的事务),依次类推。调用   CommitTrans   或   RollbackTrans   只影响最新打开的事务;在处理任何更

高层
事务之前必须关闭或回卷当前事务。

调用   CommitTrans   方法将保存连接上打开的事务中所做的更改并结束事务。调用   RollbackTrans   方法还原打开事务中所做的更改并结束事务。在未打开事务时调用其中任何一种方法都将引发错误。

取决于   Connection   对象的   Attributes   属性,调用   CommitTrans   或   RollbackTrans   方法都可以自动启动新事务。如果   Attributes   属性设置为   adXactCommitRetaining,提供者在   CommitTrans   调用后会自动启动新事务。如果   Attributes   属性设置为   adXactAbortRetaining,提供者在调用   RollbackTrans   之后将自动启动新事务。

远程数据服务

BeginTrans、CommitTrans   和   RollbackTrans   方法在客户端   Connection   对象上无效。

BeginTrans、CommitTrans   和   RollbackTrans   方法范例

该范例更改数据库的   Titles   表中所有心理学书籍的书籍类型。在   BeginTrans   方法启动事务将所有对   Titles   表的更改隔离后,CommitTrans   方法将保存更改。可使用   Rollback   方法撤销用   Update   方法保存的更改。

Public   Sub   BeginTransX()

Dim   cnn1   As   ADODB.Connection

Dim   rstTitles   As   ADODB.Recordset

Dim   strCnn   As   String

Dim   strTitle   As   String

Dim   strMessage   As   String

‘   打开连接。

strCnn   =   “Provider=sqloledb;”   &   _

“Data   Source=srv;Initial   Catalog=pubs;User   Id=sa;Password=;   ”

Set   cnn1   =   New   ADODB.Connection

cnn1.Open   strCnn

‘   打开   Titles   表。

Set   rstTitles   =   New   ADODB.Recordset

rstTitles.CursorType   =   adOpenDynamic

rstTitles.LockType   =   adLockPessimistic

rstTitles.Open   “titles”,   cnn1,   ,   ,   adCmdTable

rstTitles.MoveFirst

cnn1.BeginTrans

‘在记录集中循环并询问是否想要更改指定标题的类型。

Do   Until   rstTitles.EOF

If   Trim(rstTitles!Type)   =   “psychology”   Then

strTitle   =   rstTitles!Title

strMessage   =   “Title:   ”   &   strTitle   &   vbCr   &   _

“Change   type   to   self   help?”

‘   更改指定雇员的标题。

If   MsgBox(strMessage,   vbYesNo)   =   vbYes   Then

rstTitles!Type   =   “self_help”

rstTitles.Update

End   If

End   If

rstTitles.MoveNext

Loop

‘   询问用户是否想提交以上所做的全部更改。

If   MsgBox(“Save   all   changes?”,   vbYesNo)   =   vbYes   Then

cnn1.CommitTrans

Else

cnn1.RollbackTrans

End   If

‘   打印记录集中的当前数据。

rstTitles.Requery

rstTitles.MoveFirst

Do   While   Not   rstTitles.EOF

Debug.Print   rstTitles!Title   &   ”   –   ”   &   rstTitles!Type

rstTitles.MoveNext

Loop

‘   恢复原始数据,因为这只是演示。

rstTitles.MoveFirst

Do   Until   rstTitles.EOF

If   Trim(rstTitles!Type)   =   “self_help”   Then

rstTitles!Type   =   “psychology”

rstTitles.Update

End   If

rstTitles.MoveNext

Loop

rstTitles.Close

cnn1.Close

End   Sub



版权声明:本文为xiaoxiaohai123原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。