加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – ADO组件CommandTimeout

发布时间:2020-12-15 04:20:21 所属栏目:大数据 来源:网络整理
导读:我对使用TADOQuery,TADOCommand或TADODataSet的查询执行超时设置有疑问(我已经尝试过每一个).我有一个小应用程序,它连接到数据库并定期执行存储过程,作为结果返回数据集. 我的目标是保持此应用程序始终在线,但我的问题是,当连接丢失时,刚刚执行的命令(通过上
我对使用TADOQuery,TADOCommand或TADODataSet的查询执行超时设置有疑问(我已经尝试过每一个).我有一个小应用程序,它连接到数据库并定期执行存储过程,作为结果返回数据集.
我的目标是保持此应用程序始终在线,但我的问题是,当连接丢失时,刚刚执行的命令(通过上述组件之一)的超时默认为30秒.我一直在寻找解决方案,但没有任何效果.
你能给我一个建议,如何设置CommandTimeout,例如为了尊重我自己的超时,请问如何修改ADODB.pas 5秒或更好?

对此有许多“解决方案”,例如set DataComponent.Connection.CommandTimeout:= 1;但实际上,没有任何作用.我正在使用D2009,MSSQL2005,并且在线程中动态创建连接以及数据组件.

最后,我试过的是这个

// protected variable owned and created in the thread with its own connection
var Query_Object: TADODataSet; 

// connection timeout is set to 3 seconds
Query_Object.Connection.ConnectionTimeout := 3;
...

// this piece of code I'm calling periodically in the only one existing thread
...
SQL_Query := 'EXEC my_procedure_which_returns_dataset'

with Query_Object do
  begin
    Close;    
    CommandType := cmdText;
    CommandText := SQL_Query;
    CommandTimeout := 5;             // doesn't affect the timeout
    CursorLocation := clUseServer;   // let the dataset retreives prepared data
    Open;
  end;

// and here I need to get faster than in the default 15 seconds to let the user
// know that the reading takes more than mentioned 5 seconds
...

非常感谢 :)

解决方法

当你有长时间运行的查询时,CommandTimeout正在开始. TADOConnection有一个CommandTimeout属性但不起作用.您必须使用TADODataSet的CommandTimeout.

如果服务器不可用,您的问题显示“连接丢失”,则需要指定TADOConnection组件的ConnectionTimeout.在将控制权返回给您的应用程序之前,默认值为15秒.

编辑1我想我发现了CommandTimeout不起作用的情况.我已经在一张非常大的桌子上测试了这个.返回所有行需要几分钟.如果我的存储过程确实从BigTable中选择*,则查询超时永远不会发生.至少我没有耐心等待它.但是如果查询看起来像这样从ColT1的BigTable顺序中选择*并且Col1上没有索引,则CommandTimout按预期工作.

在SSMS中运行它们时,两个查询之间的区别是显而易见的.第一个开始立即返回行,第二个需要在返回行之前“思考”它.当SQL Server找到所需的行并开始返回它们时,CommandTimeout不起作用.

如果将CursorLocation设置为clUseServer,则CommandTimeout将按预期为两个查询工作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读