使用iSeries Access ODBC驱动程序时,app.config文件上的CommandTimeout和QueryTimeout有什么区别?

时间:2014-04-14 13:37:17

标签: .net odbc ibm-midrange

我正在使用最近移动了iSeries数据源的.NET控制台应用程序。在移动之后,应用程序经历了超时,这使我相信需要增加其中一个超时(并且也是优化的网络连接)。

这是控制台应用程序开始生成错误的一部分:

  

错误消息:ERROR [HY000] [IBM] [System i Access ODBC Driver] [DB2   for i5 / OS] SQL0666 - SQL查询超出指定的时间限制或存储   限制。

当我将代码中的CommandTimeout从60增加到120时,它起作用了。但是我认为在连接字符串中设置超时是理想的,所以我删除了该行。

在连接字符串中我添加了QueryTimeout=120。当我运行程序时,我再次收到上述错误。

仅供参考,这是我的连接字符串的样子:

"Driver=iSeries Access ODBC Driver;System=x.x.x.x;UID=something;pwd=something;QueryTimeout=120"

我注意到这样做的是,当连接字符串上的QueryTimeout设置为零时,数据提取似乎不会超时。将其设置为其他任何内容都将失败。同时,.net代码中的commandTimeout属性可以根据需要进行更改,并且可以正常工作。带我回答我的问题,QueryTimeoutCommandTimeout之间有什么区别?为什么QueryTimeout似乎仅在它被设置为零而不是其他任何东西时起作用?

1 个答案:

答案 0 :(得分:3)

QueryTimeout是一个布尔值,指示是否遵守通过CommandTimeout属性设置的SQL_ATTR_QUERY_TIMEOUT值。

QueryTimeout

  

指定驱动程序是否将禁用对查询超时属性SQL_ATTR_QUERY_TIMEOUT的支持。如果禁用,SQL查询将一直运行直到完成。

  0 =禁用对查询超时属性的支持
  1 =允许设置查询超时属性

  默认值为1.

CommandTimeout

  

等待命令执行的时间(以秒为单位)。默认值为30秒。

相关问题