Coldfusion cfquery:找不到句柄为x的准备语句

Coldfusion cfquery:找不到句柄为x的准备语句,coldfusion,Coldfusion,我们间歇性地但经常地收到以下错误: 执行数据库查询时出错。[Macromedia][SQLServer JDBC驱动程序][SQLServer]找不到句柄为1的准备语句 我实现了我能够找到的两种解决方案- 在查询末尾放一个分号,以强制重新编译查询 将此MS-SQL放在查询的末尾:选项“重新编译” 我应用了修正1,错误在那天剩下的时间里停止了。第二天,错误又出现了 我应用了Fix2,同样的事情发生了——直到第二天才出现错误 我确实理解,每当我使用一个已准备好的语句时,它都会自动使用,但是否有办法强

我们间歇性地但经常地收到以下错误:

执行数据库查询时出错。[Macromedia][SQLServer JDBC驱动程序][SQLServer]找不到句柄为1的准备语句

我实现了我能够找到的两种解决方案-

在查询末尾放一个分号,以强制重新编译查询 将此MS-SQL放在查询的末尾:选项“重新编译” 我应用了修正1,错误在那天剩下的时间里停止了。第二天,错误又出现了

我应用了Fix2,同样的事情发生了——直到第二天才出现错误

我确实理解,每当我使用一个已准备好的语句时,它都会自动使用,但是否有办法强制db在每次使用查询时重新准备,而不依赖缓存语句

请注意,我没有此Cf服务器的管理员访问权限

Cf版本是9.0.0

SQL Server 9.0.3054

有问题的问题是:

<cfquery datasource="#dsn#" name="q" maxrows="1">
SELECT
ID
FROM
tableOne
WHERE ID = <cfqueryparam cfsqltype="cf_sql_integer" value="#url.ID#">
ORDER BY ID
</cfquery>

感谢您的错误:我以前见过当dsn的值从一个请求更改为下一个请求时出现的错误。 如果不是这样,请尝试应用CF更新,因为您仍然使用9.0.0

关于您的问题:将Max Pooled语句设置为0。这将要求CF每次重新准备语句。此外,取消选中维护连接也需要重新编译,因为每次请求时都会重新协商到DB的连接


还有一个技术注意事项,SQL Server将始终缓存执行计划,无论您在CF中执行什么操作。CF只是保留该准备语句的句柄,因此它不必每次都通过线路传递SQL。

您可以将CachedWithin属性设置为您的cfquery语句

<cfquery 
    name="GetParks" datasource="#dsn#" name="q" maxrows="1" 
    cachedwithin="#CreateTimeSpan(0, 0, 0, 0)#">

上面的示例将始终将查询保留在缓存之外

这听起来可能很愚蠢,但您是否考虑过maxrows属性可能会导致您的问题。尝试使用TOP,看看会发生什么

<cfquery datasource="#dsn#" name="q">
SELECT TOP 1
ID
FROM
tableOne
WHERE ID = <cfqueryparam cfsqltype="cf_sql_integer" value="#url.ID#">
ORDER BY ID
</cfquery>

检查您的http日志,看看是否有url.id的值。或者,将url.id设置为空字符串并尝试查询。查看是否得到相同的错误消息.Dan-在日志中,url.ID在所有情况下都设置为整数。在黑暗中运行值为的查询为CFSQLTYPE CF\u SQL\u INTEGER.Shot生成了无效数据,但是实际的SQL语句是否真的从中选择ID。。。还是使用SELECT*FROM。。。。如果是后者,请尝试为GRIN指定列列表,而不是*.Leigh,生产中的实际查询指定列列表。好的。老实说,我不知道到底是什么原因导致了这个问题,但如果这是一个服务器或dsn配置问题,你需要让服务器管理员参与解决它。我不认为你可以在版本8中使用这个解决方案与cfqueryparam或以前的编辑否,这是一种完全不同的缓存类型。它指的是时间的长短。无论是否合理,cachedwithin修复程序已将错误发生率减少了90%左右,这是一个可接受的水平。多亏了这一切,coldfusion 8和以前的版本中实现了隔离。也许是9.0.0实际上我从来没有测试过。纯粹是对核心的推测,但我认为这是因为所有查询处理的缓存机制都已同步到单个对象中。它实际上比任何东西都更烦人,这个解决方案基本上是利用一个bug来解决另一个bug。@Blippids如果您想在CreateTimeSpan中使用时间变量,您可能可以进一步降低错误率。@XaxD-老实说,我对内部的了解还不够,因此无法对这些假设产生足够的信心…:就理论而言,它们并没有完全脱离实际,但依靠未经证实/不可预测的副作用(这些副作用本身也有副作用)并不合适。就我个人而言,我仍然在寻找根本原因和可靠的解决方案。Re:在CreateTimeSpan中使用时间变量,请记住这意味着查询可能无法检索最新数据。如果基础表经常更改,这可能是一个问题;我确实检查并确定dsn没有改变。不幸的是,我无法更改服务器上的设置或应用更新,原因是非技术性的。Rob,我尝试了一下,但没有减少错误的发生。这绝对值得一试我见过陌生人的东西会出错谢谢