[转载]conn.State和conn.errors.count的选择 – 轻灵自由的珍珠 – 博客频道 – CSDN.NET

[转载]conn.State和conn.errors.count的选择 – 轻灵自由的珍珠 – 博客频道 – CSDN.NET.

早上上班坐下,开机,打开熟悉的工作网站界面,突然发现网站提示数据库链接失败,但是系统作的错误拦截居然没有生效果(数据库链接的原因是数据库服务器没开,这个不是本文重点)。
检查了一下判断连接是否成功的代码发现是这样写的
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)

分享到:更多 ()