我在使用Odbc连接字符串调用DB2数据库时会定期收到此错误消息。我已经尝试将DbCommand对象的CommandTimeout设置为多个值,但我仍然收到以下错误。
SQL0666 - SQL查询超出指定的时间限制或存储限制。
是否有一个技巧可以阻止错误输出。这很奇怪,因为相同的查询有时会起作用,有时会超时。任何帮助,将不胜感激。谢谢!
答案 0 :(得分:14)
我试过设置 DbCommand对象的CommandTimeout 多个值
我设置DbCommand.CommandTimeout = 0并修复了超时错误
答案 1 :(得分:6)
Kite的答案是正确的,但是,我想在SQL Server集成服务(SSIS)项目中搜索此相同错误消息时找到此问题和答案后,分享我的观察/经验。
今天早些时候,我的一个SSIS软件包开始在其中一个步骤上收到此错误。经过一些研究后,我发现我的软件包在通过ODBC连接到iSeries数据库的DataReader Source
对象上失败了。我不确定这是ODBC错误,还是iSeries / ODBC数据库驱动程序中的错误,但错误消息完全相同。
对我来说,真正奇怪的是我可以在MS Access中的链接表中浏览数据,该表通过相同的ODBC连接进行连接,我也可以在同一数据集中运行MAKE TABLE
操作访问没有任何问题。在搜索错误消息后,我发现了这个Q&答:这个技巧也适用于SSIS包。
要在SSIS中修复此问题,您需要在Microsoft BIDS设计器中打开包。接下来,打开关联的Data Flow Task
,然后选择遇到超时的DataReader Source
对象。
您的DataReader Source
对象的属性也名为CommandTimeout
。将其设置为0
(而不是默认的30
)应该可以解决问题。在验证超时是问题之后,我将超时设置为60
并重新执行该步骤。一分钟超时解决了问题。
值得注意的是,将CommandTimeout
所有DataReader Source
个对象的0
值更新为{{1}}可能很诱人。不建议这样做。相反,保持超时并将限制增加到相当慷慨的价值。像我一样加倍它们,或者给出一个更加慷慨的5-10分钟超时值。
超时属性存在是有原因的。您可以为应用程序提供超时超时,但如果应用程序根本没有超时,那么您的应用程序可能会在数据库引擎中出现问题导致该步骤永远不会执行的可能性!这可能不太可能,但并非不可能。
保持安全并适当调整您的超时。