SQL SERVER中的raiserror, 与vb中的err.number ??

refugeetaotao 2007-02-05 02:47:16
情况是这样的.
1. 首先,我用
EXEC sp_addmessage @msgnum = 50002, @severity = 16,
@msgtext = N'出库数量错误',
@lang = 'us_english'
自定义了一个错误信息.

2.我在出库表中创建了一个触发器, 判断在插入出库数量大于实际数量的时候就回
滚该出库记录.并且用raiserror(50002,16,8)发出错误
简单程序描述:
create trigger insertquantity
on output
after insert
...
if 出库量>库存量 则
begin /*不符合插入数量条件,删除当前插入的记录*/
raiserror(50002,16,8)
end
....
....

3.最后我就用VB执行cn.execute "insert into.."插入操作了.我对cn.execute用
事务cn.BeginTrans
简单描述:
on error goto errs:
cn.BeginTrans
cn.execute
cn.committrans
errs:

cn.RollbackTrans

现在问题来了,我想在事务回滚后用err.number判断是不是由于用户输入的出库数量大于了库存数量,还是忽然与数据库连接失败了才导致失败的.于是我就用第2里说的raiserror发出的50002来判断
if err.number = 50002 then msbgox "数量不符合实际库存量" (本人没用过
err.number,所以想当然的以为raiserror会把50002副值给err.number,但似乎这样的理解是错误的.我用msgbox err.number发现错误号是-2147217900),

在判断是否与数据库连接失败才导致CN.EXECUTE失败的时候我也用了
if err.number = ...同样的语法

一.我搞不明白的是为什么err.number != 50002而等于-2147467259 ,但msgbox errdescription却显示的是我在第1里定义的错误的值"出库数量错误".这是什么原因呢?
二.怎样才能用ERR.NUMBER准确判断是插入数量错误导致的失败,还是连接忽然中断导致的失败呢
三.这raiserror起什么作用呢?它发出的错误号,会与VB中的ERR.NUMBER有关联吗?若有是怎么关联呢?谢谢大家了
...全文
398 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
zyg0 2007-02-05
  • 打赏
  • 举报
回复
vb的数据库调用的错误类型和sql是不同的 如果你想实现你的功能 最好全部的插入写成存储过
存储过程返回 你执行的结果 是成功 还是失败 效果是一样的 因为前台只有一个存储过程调用语句 因此不用采用事务

1,217

社区成员

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

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