我们使用的是来自C#的IBM数据提供程序。NET 4.5来查询i系列DB2数据库。通常情况下,这非常有效,但对于某些查询,DB2会报告错误"SQL0666-SQL查询超出了指定的时间限制或存储限制"。
我曾尝试将命令超时设置为0,但没有效果。我还尝试以这里解释的方式执行CHGQRYA命令,将QRYTIMLMT值设置为*NOMAX(或其他一些大值),但似乎没有效果。但是,如果我使用相同的命令来设置QRYSTGLMT(存储限制),它就会生效。因此,我知道我正确地使用了该命令,并且它会被数据库解释和执行。
那么,是什么原因导致我无法设置QRYTIMLMT值呢?
此外,我们的"DBA"在其端将限制设置为*NOMAX,并且对于不通过的查询。NET提供程序,一切正常。
我们使用的是IBM的客户端工具6r1版本和服务包SI42423。
好的,所以经过大量测试,我发现了问题。
我们使用DeriveParameters()方法来正确设置参数类型,如果在设置CommandTimeout之前调用此方法,则后者无效(!)。解决方案是颠倒这些语句的顺序。