我用ADO与SQL server建立长连接(这个连接可能保持几个星期甚至更长),我想在运行过程中如果发生什么意外令连接中断的话,会导致错误,因此在每次使用数据库连接之前我都检查一下它的状态,如果是adStateClosed(0)的话我就重新连接。
但为什么GetState取得的连接状态都是adStateOpen(1)!?我将数据库关了,等了好几分钟,监测到的状态还是adStateOpen!

解决方案 »

  1.   

    据我所知,用GetState函数来判断状态反正不太好使。一般可以用连接做一个空操作(比如肯定不会返回什么东西的查询语句),看看是否执行到catch中(try...catch),如果到了catch,可以查看异常类型和异常内容,如果是数据库连接错误,那么肯定是数据库中断连接了。
      

  2.   

    是阿。这可能要看看帮助信息才能判断了。
    我们以前也就是简单的判断一下e.Description()是不是"连接失败"来处理的。我曾经在数据库板块问过类似的问题。但也没有得到什么解决办法。
      

  3.   

    http://community.csdn.net/Expert/topic/3690/3690672.xml?temp=.7195246
    这是我问的问题的连接。你看一下,有没有什么帮助。
      

  4.   

    你问我我也没办法说出是哪些。我的程序里就是简单的判断e.Description() == "连接失败"来判断的。可能不是太可靠。不过我也没有去仔细考究。你可以自己测试一下。当数据库断开以后,如果执行查询语句,catch中的异常是什么样的。本来我是想通过异常号来区别的,可发现异常号居然是个没有进行归类的异常号。所以我也没有办法。只能靠异常描述来判断。"连接失败"是我反复测试后的经验值。
      

  5.   

    呵呵。我也没有别的办法。因为确实我没有发现有别的办法。如果你有好的办法,请务必要通知我一下阿。我的信箱:[email protected]
      

  6.   

    ADO的设计很有欠扁,没办法了,决定用e.Description() == "连接失败" || e.Description() == "连接关闭"来判断。
    此帖再晾一天,明天结帖。