【发布时间】:2011-07-05 20:38:04
【问题描述】:
我有一个使用 Delphi 的 TAdoConnection 对象连接到 MySql 数据库的应用程序。这是一个查询非常密集的应用程序。所以我创建连接并保持打开状态,以避免打开/关闭数据库连接的高资源开销。但显然会出现问题(数据库重新启动、网络连接失败等)。所以我内置了代码来释放我的数据库对象,重新创建它,并在查询失败时重新连接。
我有一个通用的函数来连接数据库。相关代码是这样的:
try
AdoConnection.open;
result := Adoconnection.Connected
except
result := False;
......
end;
我通过打开和关闭 MySql 数据库进行了一些测试。如果数据库在应用程序启动时关闭(即它正确地引发异常),则一切正常。但是,如果我在应用程序已成功连接后关闭数据库,则后续重新连接不会引发异常,并且另外 falsley 报告 AdoConnection.Connected 为 true。我确信连接对象首先被释放/重新创建。
这里似乎有某种缓存机制(很可能在硬件/驱动程序级别 - 而不是应用程序级别)。有人有什么想法吗?
【问题讨论】: