如何判断ado的connection与数据库的连接已经断开?

时间:2022-03-03 04:33:50
全局connection对象创建后,连接sqlserver成功,程序运行一段时间后,如何判断connection对象与数据库的连接是否正常,是否已经断开(由于网络的问题等)?
connection的state属性无法判断(断开后仍为1),不知各位高手有什么办法可以判断?请给出示例代码,谢谢!

9 个解决方案

#1


cn.State = adStateOpen
可以的

#2


不行,adStateOpen只是表示连接打开成功,并不表示当前连接是否有效。

#3


我的程序就是这样用的,没有出问题。

#4


我试过了,连接建立后,状态是adStateOpen,过一会断开网络连接,数据库操作报错时,connection的状态仍然是adStateOpen。

#5


你是断开了网络物理连接?

#6


那就麻烦了。

那你首先要判断客户端到sql server的网络连接是否正常,然后再判断数据库的连接是否有效。

#7


那就麻烦了,你首先要判断客户端到sql server的网络连接是否正常,可以通过ping方法来实现;然后再判断到数据库的连接是否有效。

#8


#9


如果你的Adoconnection的keepconnection属性设为true的话,那么你可以使用ondisconnect来判断连接是否断开,如果是false的话,ondisconnect是不行的,应为你在其它的Ado控件如adoquery里将adoquery的active设为false或者使用close都会触发ondisconnect事件将Active设为true或者open之后就会触发afterconnect事件,使用事件察看器跟踪发现,将AdoQuery的open时(Active=true)事实上作了一个sp_reset_netconnect(可能写错了)的动作。

#1


cn.State = adStateOpen
可以的

#2


不行,adStateOpen只是表示连接打开成功,并不表示当前连接是否有效。

#3


我的程序就是这样用的,没有出问题。

#4


我试过了,连接建立后,状态是adStateOpen,过一会断开网络连接,数据库操作报错时,connection的状态仍然是adStateOpen。

#5


你是断开了网络物理连接?

#6


那就麻烦了。

那你首先要判断客户端到sql server的网络连接是否正常,然后再判断数据库的连接是否有效。

#7


那就麻烦了,你首先要判断客户端到sql server的网络连接是否正常,可以通过ping方法来实现;然后再判断到数据库的连接是否有效。

#8


#9


如果你的Adoconnection的keepconnection属性设为true的话,那么你可以使用ondisconnect来判断连接是否断开,如果是false的话,ondisconnect是不行的,应为你在其它的Ado控件如adoquery里将adoquery的active设为false或者使用close都会触发ondisconnect事件将Active设为true或者open之后就会触发afterconnect事件,使用事件察看器跟踪发现,将AdoQuery的open时(Active=true)事实上作了一个sp_reset_netconnect(可能写错了)的动作。