【问题标题】:SQL0666 - SQL query exceeds specified time limit or storage limitSQL0666 - SQL 查询超出指定的时间限制或存储限制
【发布时间】:2011-02-24 22:41:56
【问题描述】:

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

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

有什么诀窍可以让它停止出错。这很奇怪,因为相同的查询有时会起作用,有时会超时。任何帮助,将不胜感激。谢谢!

【问题讨论】:

  • @Issac Levin,我删除了 .Net 标签并添加了 SSIS 标签,以便更广泛的受众可以找到并使用此问答。这适用于 SSIS 包,因为这是相同的错误,但是,修复它与在 .Net/C# 项目中修复它略有不同。

标签: c# ssis odbc db2 dbcommand


【解决方案1】:

我试过设置 DbCommand 对象的 CommandTimeout 多个值

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

【讨论】:

    【解决方案2】:

    Kite 的答案是正确的,但是,在从 SQL Server 集成服务 (SSIS) 项目中搜索同一错误消息的修复程序时,我想在找到此问题和答案后分享我的观察/经验。

    今天早些时候,我的一个 SSIS 包在其中一个步骤上开始收到此错误。经过一番研究,我发现我的包在通过 ODBC 连接到 iSeries 数据库的DataReader Source 对象上失败。我不确定这是 ODBC 错误,还是 iSeries/ODBC DB 驱动程序中的错误,但错误消息完全相同。

    对我来说,真正奇怪的是,我可以从 MS Access 中的链接表中浏览数据,该链接表通过相同的 ODBC 连接进行连接,并且我还可以在 Access 中对同一数据集运行 MAKE TABLE 操作,而无需任何麻烦。搜索错误消息后,我找到了这个 Q & A。这个技巧也适用于 SSIS 包。

    要在 SSIS 中解决此问题,您需要在 Microsoft BIDS 设计器中打开您的包。接下来,打开关联的Data Flow Task,然后选择遇到超时的DataReader Source 对象。

    您的DataReader Source 对象具有一个也名为CommandTimeout 的属性。将其设置为0(而不是默认的30)应该可以解决问题。在验证超时是问题后,我将超时设置为60 并重新执行了该步骤。一分钟超时解决了这个问题。

    值得注意的是,将所有DataReader Source 对象上的CommandTimeout 值更新为0 可能很诱人。不建议这样做。相反,保持超时并将限制增加到相当大的值。像我一样将它们加倍,或者给出更慷慨的 5-10 分钟超时值。

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

    注意安全并适当调整超时。

    【讨论】:

      【解决方案3】:

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

      OdbcCommand cmd = new OdbcCommand(string.Format("") cmd.CommandTimeout = 0; OdbcDataAdapter da = new OdbcDataAdapter(cmd);
      

      【讨论】:

      • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-26
      • 2013-04-03
      • 1970-01-01
      相关资源
      最近更新 更多