欢迎来到天天文库
浏览记录
ID:42722291
大小:42.50 KB
页数:4页
时间:2019-09-20
《VB中的事务处理》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、VB中的事务处理有一下两种方式:1. conn.BeginTrans'开始 '执行语句 conn.Executesql IfErr.Number=0Then conn.CommitTrans'---提交事務 Else conn.RollbackTransaction MsgBox"失败" EndIf 2. OnErrorGoToerr_trans intTrans=newConn.BeginTrans '开始事务 newConn.Executesql newConn.CommitTrans
2、 '提交事务 intTrans=0 newConn.Close '关闭连接 MsgBox"OK"exit_trans: SetnewConn=Nothing '释放对象 ExitSub '退出过程err_trans: '错误跳到这儿处理 '如果是事务处理中出错,则事务回滚 IfintTrans=1Then newConn.RollbackTrans EndIf Resumeexit_trans 看起来两种方式都没什么问题,但是在我的项目里使用第一种方式却
3、遇到了一个很奇怪的错误,大家见下图: 很明显我使用的是sql,不是存储过程,而且我的sql在查询分析器里运行的完全正常,它却说我有误,真是让我百思不得其解。 更加奇怪的是,这个错误只在项目生成exe以后才会冒出来,也就是说在开发阶段,在VB工程里面运行的是好好的,一旦到开发的差不多了,打包生成exe文件,生成的过程不会出错,运行到特定代码调用这里的时候才会出错!这实在是个郁闷的问题,因为在项目刚开始的时候一般不会生成exe文件来测试运行,而是直接在VB开发环境下运行,在这种情况下是运行的好好的,所以到了项目后期可着实让我忙乱了好久,一直找不到原因,,,,不知道大家有没
4、有遇到过 后来我使用了2方法,这个就没出问题了,不过还是有些地方要注意的,我在这里提醒一下大家吧,也算是对自己研究的总结: 首先看如下代码: OnErrorGoToerr_trans intTrans=newConn.BeginTrans '开始事务 sql="insertintoSales(dish_id,uid)values(8,2); insertintoSales(dish_id,uid)values(8,2);" '这里面有两句sql,在查询分析器里执行都是没有问题的 newConn.Executesql
5、 newConn.CommitTrans '提交事务 intTrans=0 newConn.Close '关闭连接 MsgBox"OK"exit_trans: SetnewConn=Nothing '释放对象 ExitSub '退出过程err_trans: '错误跳到这儿处理 '如果是事务处理中出错,则事务回滚 IfintTrans=1Then newConn.RollbackTrans MsgBox"false" EndIf Resumee
6、xit_trans 执行的过程中没遇到任何问题,弹出"OK",下面我们改一下sql,将第一句的id值插入字符串'aaaa' sql="insertintoSales(dish_id,uid)values('aaaa',2); insertintoSales(dish_id,uid)values(8,2);" 意料之中,弹出了"false",事务回滚了,而且数据库中的数据也没有增加,下面再做另外一个实验: 将第二句的id值插入字符串'aaaa' sql="insertintoSales(dish_id,uid)values(8,2);
7、 insertintoSales(dish_id,uid)values('aaaa',2);" 再次执行,让我惊讶的是居然弹出了"OK",怎么会这样呢,急忙查看数据库发现数据并没有增加,还好! 静下心来思考,一番,大概对VB的事务形式做了如下推断: 1.正常情况下,正常执行,这个没有任何问题 2.如果传给Execute方法的sql不是一条语句,而是多条语句的,那么: a.如果第一条语句发生了错误,那么它会跳到newConn
此文档下载收益归作者所有