gpt4 book ai didi

delphi - 如何检测 TadoConnection 是否失去了与服务器的通信?

转载 作者:行者123 更新时间:2023-12-03 14:40:12 36 4
gpt4 key购买 nike

我需要检测 TAdoConnection 何时出现组件已失去与服务器的连接。我尝试过使用 OnDisconnect事件,但仅当调用 Close 方法或 Connected 属性设置为 false 时才会触发。

我尝试过的另一个选项是使用 TTimer并执行这样的查询

SELECT 1 RESULT FROM DUAL

在 OnTimer 事件中,捕获发生的任何异常。

是否有更好的选项来检测连接是否丢失?

最佳答案

我看到了 DUAL 表。意味着,您正在使用 Oracle :)

对于大多数(所有?)客户端/服务器 DBMS 来说,除了要求 DBMS 执行某些操作之外,无法检测连接是否丢失。连接丢失的原因有很多。可能是网络故障,可能是...,可能是 DBA 关闭了 DB。

许多 DBMS API(包括 Oracle OCI)都具有特殊功能,允许 ping DBMS。 “ping”是对 DBMS 的最小可能请求。上面的 SELECT 比这样的 ping 需要更多的工作。

但并非所有数据访问组件(包括 ADO)都允许使用 DBMS API ping 调用来 ping DBMS。然后你必须使用一些SQL命令。所以,上面的 SELECT 对于 ADO 来说是正确的。其他选项 - BEGIN NULL;结尾;。它可能使用更少的 DBMS 资源(不需要优化器,不需要描述结果集等)。

TTimer 正常。查询应该在线程中执行,其中使用相应的连接。虽然不是必须的,但这是一个不同的问题。

潜在的问题可能是在连接丢失时关闭连接。由于 DBMS API 可能处于失败状态,连接关闭可能会引发异常。

有点像...

关于delphi - 如何检测 TadoConnection 是否失去了与服务器的通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2289260/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com