8

在使用 Odbc 连接字符串调用 DB2 数据库时,我会定期收到此错误消息。我尝试将 DbCommand 对象的 CommandTimeout 设置为多个值,但仍然出现以下错误。

SQL0666 - SQL 查询超出指定的时间限制或存储限制。

有没有办法让这个停止出错。这很奇怪,因为相同的查询有时会起作用,有时会超时。任何帮助,将不胜感激。谢谢!

4

3 回答 3

15

我尝试将 DbCommand 对象的 CommandTimeout 设置为多个值

我设置了 DbCommand.CommandTimeout= 0 这修复了超时错误

于 2011-03-03T09:34:12.543 回答
7

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 分钟超时值。

超时属性的存在是有原因的。您可以为您的应用程序提供大量超时,但如果应用程序根本没有超时,您的应用程序可能会挂起,因为您的数据库引擎内部存在问题,导致该步骤永远不会完成执行!这可能不太可能,但并非不可能。

保持安全并适当调整超时。

于 2012-06-04T13:46:17.777 回答
0

对于我的这种方式有效,请在执行前编辑 cmd OdbcCommand .....

OdbcCommand cmd = new OdbcCommand(string.Format("") cmd.CommandTimeout = 0; OdbcDataAdapter da = new OdbcDataAdapter(cmd);
于 2021-11-16T21:53:58.123 回答