conn.State和conn.errors.count的选择

早上上班坐下,开机,打开熟悉的工作网站界面,突然发现网站提示数据库链接失败,但是系统作的错误拦截居然没有生效果(数据库链接的原因是数据库服务器没开,这个不是本文重点)。
检查了一下判断连接是否成功的代码发现是这样写的
if conn.errors.count<>0 and conn.errors.count<>2 then
显示链链失败提示
end if
想起,原来是用conn.errors.count<>0来判断是否连接成功,但是老是判断失误,跟踪了一下原因,发现当数据库连接时有时会产生conn.errors.count等于2的结果,但是链接是成功的,所以加上了一个conn.errors.count<>2,但是,这个conn.errors.count=2却包含了所有连接不成功的原因,所以发生了上面说的那一幕。

想了半天没想出个办法,上个洗手间,晕倒,居然在洗手时想到conn有一个检查连接状态的属性(为什么会在去洗手间时想到的呢?),回来查了一下ado的chm手册,找到了state属性,下面是这个属性的一些值
AdStateClosed  默认,指示对象是关闭的。
AdStateOpen   指示对象是打开的。
AdStateConnecting 指示 Recordset 对象正在连接。
AdStateExecuting 指示 Recordset 对象正在执行命令。
AdStateFetching  指示 Recordset 对象的行正在被读取。

查了一下adovbs.ini,这几个状态的真实值是:
Const adStateClosed = &H00000000
Const adStateOpen = &H00000001
Const adStateConnecting = &H00000002
Const adStateExecuting = &H00000004
Const adStateFetching = &H00000008

state还是一个组合值,如当状态是AdStateExecuting Recordset 对象正在执行命令时,真正值应该是AdStateOpen和AdStateExecuting的组合。具体什么样的组合格式,有心人可以试试。我现在的重点是第一个参数adStateClosed,很明显adStateClosed的十进制值是0
那也就是说当conn.State<>0就是链接成功。那判断句就可以改成
if conn.State=0 then
显示链链失败提示
end if
测试所有错误成功状态,拦截工作一切正常。耶~(这个是被MM感染了,喜欢说耶,要吐的吐啊吐的就习惯了的。-_-||b)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值