



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
VB中的事务处理有一下两种方式:1. conn.BeginTrans 开始 执行语句 conn.Execute sql If Err.Number = 0 Then conn.CommitTrans -提交事務 Else conn.RollbackTransaction MsgBox 失败 End If 2. On Error GoTo err_trans intTrans = newConn.BeginTrans 开始事务 newConn.Execute sql newConn.CommitTrans 提交事务 intTrans = 0 newConn.Close 关闭连接 MsgBox OKexit_trans: Set newConn = Nothing 释放对象 Exit Sub 退出过程err_trans: 错误跳到这儿处理 如果是事务处理中出错,则事务回滚 If intTrans = 1 Then newConn.RollbackTrans End If Resume exit_trans 看起来两种方式都没什么问题,但是在我的项目里使用第一种方式却遇到了一个很奇怪的错误,大家见 下图: 很明显我使用的是sql,不是存储过程,而且我的sql在查询分析器里运行的完全正常,它却说我有误,真是让我百思不得其解。 更加奇怪的是,这个错误只在项目生成exe以后才会冒出来,也就是说在开发阶段,在VB工程里面运行的是好好的,一旦到开发 的差不多了,打包生成exe文件,生成的过程不会出错,运行到特定代码调用这里的时候才会出错!这实在是个郁闷的问题,因为 在项目刚开始的时候一般不会生成exe文件来测试运行,而是直接在VB开发环境下运行,在这种情况下是运行的好好的, 所以到了项目后期可着实让我忙乱了好久,一直找不到原因,不知道大家有没有遇到过 后来我使用了2方法,这个就没出问题了,不过还是有些地方要注意的,我在这里提醒一下大家吧,也算是对自己研究的总结: 首先看如下代码: On Error GoTo err_trans intTrans = newConn.BeginTrans 开始事务 sql = insert into Sales(dish_id,uid) values (8,2); insert into Sales(dish_id,uid) values (8,2); 这里面有两句sql,在查询分析器里执行都是没有问题的 newConn.Execute sql newConn.CommitTrans 提交事务 intTrans = 0 newConn.Close 关闭连接 MsgBox OKexit_trans: Set newConn = Nothing 释放对象 Exit Sub 退出过程err_trans: 错误跳到这儿处理 如果是事务处理中出错,则事务回滚 If intTrans = 1 Then newConn.RollbackTrans MsgBox false End If Resume exit_trans 执行的过程中没遇到任何问题,弹出OK,下面我们改一下sql,将第一句的id值插入字符串aaaa sql = insert into Sales(dish_id,uid) values (aaaa,2); insert into Sales(dish_id,uid) values (8,2); 意料之中,弹出了false,事务回滚了,而且数据库中的数据也没有增加,下面再做另外一个实验: 将第二句的id值插入字符串aaaa sql = insert into Sales(dish_id,uid) values (8,2); insert into Sales(dish_id,uid) values (aaaa,2); 再次执行,让我惊讶的是居然弹出了OK,怎么会这样呢,急忙查看数据库发现数据并没有增加,还好! 静下心来思考,一番,大概对VB的事务形式做了如下推断: 1.正常情况下,正常执行,这个没有任何问题 2.如果传给Execute方法的sql不是一条语句,而是多条语句的,那么: a.如果第一条语句发生了错误,那么它会跳到newConn.RollbackTrans代码处,正常的回滚事务,如果在这 里我们需要返回值或者给出提示的话是可以给出正确的提示的(可以返 回 false或者提示 操作失败) b.如果在这多条sql中,不是第一条发生错误的,那么就有问题了,你会发现,这时候无法给出正确的提示了,操作人员会看到返回true,或者提示操作成功,可是鬼魅的是数据库里并没有增加记录(包括前面正常的数据也没有被插入),我通过单步调试发现,确实程序的并没有执行到newConn.RollbackTrans这句代码,可是数据确实回滚了,这说明了第一条语句执行成功,VB接收到了这个返回值,就把整个事务给commit了,也就是说这个回滚根本不是VB里面的newConn.RollbackTrans代码来完成的,而是数据库完成的(字符型换成整型失败) 由于一些特殊的业务需要,我们经常会出现拼接sql的情况,也就是下面的情况: For j = 0 To 10 注意减1 sql=sql & insert into Sales(dish_id,uid) values. Next j 我这里只是一些事例代码,但是可以看出上面的sql已经是10条sql了,如果这时候调用newConn.Execute sql,那么 按照前面的分析,如果错误不是发生在第一条sql而是在后面的sql的话,那么你的得到的返回值或者提示是不正确的, 也就是你看到了操作成功,但是实际上并没有数据的情况(事实证明确实如此)。解决的办法很简单,在for之前开始事务, 并在其中一句一句执行sql,在next后面做事务的处理,如下代码: On Error GoTo err_trans intTrans = conn.BeginTrans 开始事务 X = count For i = 0 To X sql=insert into Sales(dish_id,uid) values. conn.Execute sql Next j conn.CommitTrans 提交事务 intTrans = 0 MsgBox OKexit_trans: Exit
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高频所有知识完整课件
- 济宁市2024-2025学年九年级上学期语文月考模拟试卷
- 高铁安检课件培训
- 高血压病人护理
- 高血压对孕妇的影响
- 环卫保洁服务方案
- 电脑焊接专业知识培训课件
- 电能质量监督课件
- 电缆外贸基础知识培训课件
- 江苏省扬州市高邮市2022-2023学年九年级上学期期中化学试题(含答案)
- 图书管理员考试复习全书:试题及答案
- T-CECC 029.1-2024 数据分类分级指南 第1部分:医疗健康
- 污泥运输合同范本
- 供应链经理上半年工作总结
- DBJ04T 289-2020 建筑工程施工安全资料管理标准
- 开学防自然灾害 反毒品安全主题班会 课件
- 运输车辆司机安全培训考试专项测试题及答案
- 北师大版七年级数学上册丰富的图形世界《从立体图形到平面图形》第二课时示范公开课教学课件
- 视频制作及推广合同
- 《神经网络与深度学习课程设计》课程教学大纲
- 2025年中国东方航空集团招聘笔试参考题库含答案解析
评论
0/150
提交评论