VB处理多数据库之间的事务

NetMan1999 2005-08-21 02:49:05
各位,我现在在 程序中需要对同一个SQLSERVER中的多个数据库进行操作,例如z在demo1he和DEMO2数据库中要分别对其中的表进行更新,请问如何进行事务处理保证数据的一致性呢?这个是否属于分布式更新?
...全文
165 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
bbhere 2005-10-27
  • 打赏
  • 举报
回复
学习
lzheng2001 2005-10-27
  • 打赏
  • 举报
回复
同意楼上的方法
faysky2 2005-10-27
  • 打赏
  • 举报
回复
用ADO,不要用Adodc
'引用ADO("工程"->"引用"->Microsoft ActiveX Data Objects 2.X Library)
'可以这样满足你的要求:如果有一个事务回滚,那么其他的事务也要回滚,以保持数据的一致性

Private Sub Command1_Click()
Dim cn1 As ADODB.Connection,cn2 As ADODB.Connection
cn1.ConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=登录名;Password=密码;Initial Catalog=数据库1;Data Source=Sql服务器别名"

cn2.ConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=登录名;Password=密码;Initial Catalog=数据库2;Data Source=Sql服务器别名"

cn1.CursorLocation=adUseClient
cn2.CursorLocation=adUseClient
cn1.Open
cn2.Open
On Error GoTo Err
cn1.BeginTrans
cn2.BeginTrans
cn1.Execute("....")
cn2.Execute("....")
cn1.CommitTrans
cn2.CommitTrans
Exit Sub
Err:
cn1.RollbackTrans
cn2.RollbackTrans
Msgbox "更新出错,回滚事务!"
End Sub
hr88rong 2005-10-25
  • 打赏
  • 举报
回复
我不太明白事务,我曾遇到如下问题
出现错误提示:不能在手动或分布事务方式下创建新的连接
这是什么原因啊?

帮顶了
NetMan1999 2005-08-22
  • 打赏
  • 举报
回复
各位提提想法,谢谢!
NetMan1999 2005-08-21
  • 打赏
  • 举报
回复
但是,如果 我用VB的话,比如采用ADO

定义ADOC1为连接数据库DEMO1
定义ADOC2为连接数据库DEMO2

那么我 用那个连接对象进行事务呢?是ADOC.BeginTrans ,还是ADOC2.BeginTrans

多谢!
sdrcxzy 2005-08-21
  • 打赏
  • 举报
回复
学习
shawls 2005-08-21
  • 打赏
  • 举报
回复
BeginTrans、CommitTrans 和 RollbackTrans 方法


这些事务方法按如下方式管理 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 对象上无效。
pweixing 2005-08-21
  • 打赏
  • 举报
回复
一个事务处理就好了!当然要用到分布式更新了。

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧