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