【发布时间】:2021-10-27 06:02:25
【问题描述】:
这里是 Delphi 10.4.2 。一个 ADOConnection 和一个 ADOQuery 。
ADOConnection 使用 OleDB (UDL) 连接到 MSSQL。我已经离开了 CommandTimeout 30 。 现在我将 ADOQuery 放在此表单上,将其 Connection 属性设置为 ADOConnection 。所有其他值都是默认值,CommandTimeout 是 30。
现在让我们假设我们有一个非常大的表超时。使用默认的 30 秒。
我的问题是:
如果我将 ADOQuery CommandTimeout 设置为 600 它可以工作 但如果我只将 ADOConnection CommandTimeout 设置为 600,它仍然会超时
如果 ADOConnection 上的 CommandTimeout 不简单地将其值传播到它的关联组件(当然直到我覆盖它们),它有什么目的?
谢谢。
编辑 1:
ADOConnection CommandTimeout 是否实际上用于 ADOConnection 必须执行的一些后台任务来建立连接? 例如,如果我在 IDE 中激活它,然后有一个 ADOStoredProcedure 并且我想列出它使用此超时的服务器上的所有可用存储过程?
【问题讨论】:
-
没有太多数据库经验,我只评论:
TADOConnection有一个属性ConnectionTimeout可以在连接时间过长时停止。此外,它可以在其Commands属性中包含命令,并为这些命令提供CommandTimeout属性。相反,如果您使用TADOCommand实例作为命令,它们有自己的CommandTimeout属性。与ADOQuery查询相同,它们有自己的CommandTimeout属性。这不是很合乎逻辑吗? -
你编程喜欢你写的吗?标点前面有空格?喜欢
Query .CommandTimeout :=30 ;?我真的很感兴趣人们为什么要使用这些额外的空间,因为我找不到任何合乎逻辑的理由。 -
@AmigoJack :没有冒犯,但你看到的东西不存在 :) 。 ADOQuery CommandTimeout 没有。中间,我就是这么写的。就像我会写的一样,例如宝马 F20。
-
@AmigoJack :我通常做 ADOQuery.CommandTimeout_:=_true; (_ = 空格)
-
根据 MS 他们不应该干涉:docs.microsoft.com/en-us/sql/ado/reference/ado-api/…