[求救]数据库关闭了,怎么办?

快乐鹦鹉 2004-12-31 10:02:02
问题如下:
在目前的系统中,与数据库的连接我只在启动时建立一次,因为我的程序中用到了定时从数据库中获取信息。现在遇到的问题是:如果用户的服务器重新启动,那么在重新启动的过程中,我的程序可能访问数据库了,那么,显然查询会失败。由于数据库重新启动,导致先前建立的连接无效。即使数据库重新启动完毕,先前建立的连接也无法使用了(这是实际发生的问题)。
那么,针对这种情况,我该怎么办呢?才能保证这个连接有效?
我想过一些办法。比如,当查询失败时,捕捉异常。但我发现这个时候的异常编号是80004005,为未知的异常类型,就是说,根据这个异常,我无法确认这是数据库连接不上造成,这该怎么办呢?
同样,我也希望大家帮我想一想,对于这样一个需要定时访问数据库的系统,应该是只建立一次连接呢?还是每次访问数据库时去重新建立连接呢?
您的关注就是对我最大的支持!等待着您的好消息。
...全文
218 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
jinxuliang 2005-01-03
  • 打赏
  • 举报
回复
遇到同样的一个问题.
当时是捕捉异常,然后重新连接.这也是没办法的办法,判定state是不准确的.特别是数据库异常终止时候.
搬个凳子,听高人的办法了.
lemon_wei 2005-01-01
  • 打赏
  • 举报
回复
我是在捕捉到未知的异常类型时,重新连接数据库。
不过在重新连接时还是要判断一下status,如果是连接着的(虽说这时实际上已经断开了),要close,再open,不然连不上。
youngwolf 2004-12-31
  • 打赏
  • 举报
回复
ADO中有事件这一说,但从未见过有人用,查询ADO手册,其中有事件的例子,但我未看懂,仍然不知道怎么用,关于ADO事件,以前有人问过,不过好像是未得到解决,我想服务器关闭或是暂停服务,客户端应该能收到某个事件吧(如果响应事件的话)。
观注此问题!
快乐鹦鹉 2004-12-31
  • 打赏
  • 举报
回复
回复人: Poseidon2(hxy) ( ) 信誉:100 2004-12-31 10:22:00 得分: 0


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


===========
这个我也考虑过。但是ConnectionPtr不象我们的网络连接。网络连接断了以后,我们这边可以知道连接已经断了。但是数据库连接是不行的。就象一个对象指针一样,如果这个指针内容已经被释放了,光判断这个指针是空是没有用的。
同样,即使数据库关闭了,先前的ConnectionPtr的State属性仍旧是连接标志,不会帮你改为非连接标志的,我想,ADO也做不到这一点。
bohut 2004-12-31
  • 打赏
  • 举报
回复
不错,问题描述的很清晰很详细,考虑是否做为提问的模板,呵呵::)

对于定时访问数据库的程序,可以在需要访问数据库的时候再建立连接,访问结束后即关闭数据库连接,这种办法虽然会牺牲一部分处理的效率,但是可以解决数据库重启造成连接失效的问题。
究竟是每次访问时连接数据库还是在程序启动时只连一次,个人认为是要具体对待的,客户端数量很多的情况下,“常连”势必影响服务器的性能。
DentistryDoctor 2004-12-31
  • 打赏
  • 举报
回复
出现异常时测试一下连接?
Poseidon2 2004-12-31
  • 打赏
  • 举报
回复
连接有个"State"属性,判断它是否是连接状态,不是的话再重新Open一下
bohut 2004-12-31
  • 打赏
  • 举报
回复
嘿嘿,鹦鹉!
oyljerry 2004-12-31
  • 打赏
  • 举报
回复
如果查询不是很频繁,就每次使用重连一次
oyljerry 2004-12-31
  • 打赏
  • 举报
回复
现在多数是重连
bohut 2004-12-31
  • 打赏
  • 举报
回复
如果不能很清楚的判断数据库的连接状态,就只能在出现异常的地方都连接一次数据库,当然这是没办法的办法,用牺牲效率的办法来达到目的。

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧