MySQL TAdoConnnection连接“已连接”属性错误地设置为True

时间:2011-07-05 20:38:04

标签: mysql delphi ado

我有一个使用Delphi的TAdoConnection对象连接到MySql数据库的应用程序。这是一个非常查询密集型应用程序。所以我创建连接并保持打开以避免打开/关闭数据库连接的高资源开销。但显然会出现问题(数据库重启,网络连接失败等)。所以我内置了代码来释放我的数据库对象,重新创建它,并在查询失败时重新连接。

我有一个连接数据库的常用功能。相关代码是:

try
  AdoConnection.open;
  result := Adoconnection.Connected
except
  result := False;
  ......
end;

我通过打开和关闭MySql数据库来运行一些测试。如果数据库在应用程序启动时关闭(即它正确抛出异常),一切正常。但是,如果我在应用程序已成功连接后关闭数据库,则后续重新连接不会引发异常,另外falsley报告为 AdoConnection.Connected 为true。我确信首先释放/重新创建了连接对象。

这里似乎存在某种缓存机制(很可能是在硬件/驱动程序级别 - 而不是应用程序级别)。有人有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我也观察到了这一点。

处理它的想法:

  1. 如果在运行查询时出错,请检查是否存在连接问题,如果是,请尝试重新连接,然后再次运行查询。
  2. 如果您的程序使用计时器并在运行批处理查询之间等待一段时间,则在每批之前执行一个简单的查询(可能是“立即选择()”,如果失败则尝试重新连接。