我有一个使用 Delphi 的 TAdoConnection 对象连接到 MySql 数据库的应用程序。这是一个查询非常密集的应用程序。所以我创建连接并保持打开状态以避免打开/关闭数据库连接的高资源开销。但显然会出现问题(数据库重启、网络连接失败等)。所以我内置了代码来释放我的数据库对象,重新创建它,并在查询失败时重新连接。
我有一个连接数据库的常用函数。相关代码是这样的:
try
AdoConnection.open;
result := Adoconnection.Connected
except
result := False;
......
end;
我通过打开和关闭 MySql 数据库进行了一些测试。如果数据库在应用程序启动时关闭(即它会正确抛出异常),则一切正常。但是,如果我在应用程序已成功连接后关闭数据库,则后续重新连接不会引发异常,并且还会为 AdoConnection.Connected 错误地报告 true。我确定连接对象已首先被释放/重新创建。
这里似乎存在某种缓存机制(很可能在硬件/驱动程序级别 - 而不是应用程序级别)。有人有什么想法吗?
最佳答案
我也观察到了这一点。
处理思路:
- 如果您在运行查询时遇到错误,请检查是否是连接问题,如果是,请尝试重新连接,然后再次运行查询。
- 如果您的程序使用计时器并在运行查询批处理之间等待一段时间,则在每个批处理之前执行一个简单的查询(可能是“select now()”),如果失败则尝试重新连接。
关于MySQL TAdoConnnection 连接 "connected"属性错误设置为 True,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6588573/