我正在使用最近移动了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
属性可以根据需要进行更改,并且可以正常工作。带我回答我的问题,QueryTimeout
和CommandTimeout
之间有什么区别?为什么QueryTimeout
似乎仅在它被设置为零而不是其他任何东西时起作用?
答案 0 :(得分:3)
QueryTimeout是一个布尔值,指示是否遵守通过CommandTimeout属性设置的SQL_ATTR_QUERY_TIMEOUT值。
指定驱动程序是否将禁用对查询超时属性SQL_ATTR_QUERY_TIMEOUT的支持。如果禁用,SQL查询将一直运行直到完成。
0 =禁用对查询超时属性的支持
1 =允许设置查询超时属性
默认值为1.
等待命令执行的时间(以秒为单位)。默认值为30秒。