问题如下:
在目前的系统中,与数据库的连接我只在启动时建立一次,因为我的程序中用到了定时从数据库中获取信息。现在遇到的问题是:如果用户的服务器重新启动,那么在重新启动的过程中,我的程序可能访问数据库了,那么,显然查询会失败。由于数据库重新启动,导致先前建立的连接无效。即使数据库重新启动完毕,先前建立的连接也无法使用了(这是实际发生的问题)。
那么,针对这种情况,我该怎么办呢?才能保证这个连接有效?
我想过一些办法。比如,当查询失败时,捕捉异常。但我发现这个时候的异常编号是80004005,为未知的异常类型,就是说,根据这个异常,我无法确认这是数据库连接不上造成,这该怎么办呢?
同样,我也希望大家帮我想一想,对于这样一个需要定时访问数据库的系统,应该是只建立一次连接呢?还是每次访问数据库时去重新建立连接呢?
您的关注就是对我最大的支持!等待着您的好消息。

解决方案 »

  1.   

    连接有个"State"属性,判断它是否是连接状态,不是的话再重新Open一下
      

  2.   

    回复人: Poseidon2(hxy) ( ) 信誉:100  2004-12-31 10:22:00  得分: 0  
     
     
       连接有个"State"属性,判断它是否是连接状态,不是的话再重新Open一下
      
     
    ===========
    这个我也考虑过。但是ConnectionPtr不象我们的网络连接。网络连接断了以后,我们这边可以知道连接已经断了。但是数据库连接是不行的。就象一个对象指针一样,如果这个指针内容已经被释放了,光判断这个指针是空是没有用的。
    同样,即使数据库关闭了,先前的ConnectionPtr的State属性仍旧是连接标志,不会帮你改为非连接标志的,我想,ADO也做不到这一点。
      

  3.   

    ADO中有事件这一说,但从未见过有人用,查询ADO手册,其中有事件的例子,但我未看懂,仍然不知道怎么用,关于ADO事件,以前有人问过,不过好像是未得到解决,我想服务器关闭或是暂停服务,客户端应该能收到某个事件吧(如果响应事件的话)。
    观注此问题!
      

  4.   

    我是在捕捉到未知的异常类型时,重新连接数据库。
    不过在重新连接时还是要判断一下status,如果是连接着的(虽说这时实际上已经断开了),要close,再open,不然连不上。
      

  5.   

    遇到同样的一个问题.
    当时是捕捉异常,然后重新连接.这也是没办法的办法,判定state是不准确的.特别是数据库异常终止时候.
    搬个凳子,听高人的办法了.