MySQL TAdoConnnection 连接 "connected"属性错误设置为 True

标签 mysql delphi ado

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

我有一个连接数据库的常用函数。相关代码是这样的:

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

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

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

最佳答案

我也观察到了这一点。

处理思路:

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

关于MySQL TAdoConnnection 连接 "connected"属性错误设置为 True,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6588573/

相关文章:

php - 基于同一 while 循环内先前查询的数据进行查询

delphi - 从数据模块访问一个标签页上的组件

delphi - 将日期时间参数与 ADO (ODBC) 一起使用会丢失时间部分

Delphi,从第 3 方数据字段读取数据

arrays - 我可以使用集合类型作为数组索引吗?

asp-classic - 这个 ASP 递归函数有什么问题?

sql-server - SQL Server 创建表时自动命名索引

php - Yii2:如何在 Yii2 中使用 mysql LEFT() 函数和时间戳

php - 用户注册表

mysql - SQL 连接 : counting rows and get most recent row from another table