2013-07-26 1 views
4

우리는 종종 간헐적으로 다음과 같은 오류가 발생되지만 :cfquery 등 : 손잡이 준비된 문을 찾을 수 없습니다 X

Error Executing Database Query. [Macromedia][SQLServer JDBC Driver][SQLServer]Could not find prepared statement with handle 1.

나는

을 찾기 - 할 수 있었다이 문제에 대한 두 가지 솔루션을 구현
  1. 쿼리의 끝이 MS-SQL를 착용 할 것 (아마도 쿼리의 재 컴파일을 강제로) 쿼리의 끝에 세미콜론을 넣어 : OPTION (RECOMPILE)

수정 1을 적용했고 해당 날짜의 나머지 시간 동안 오류가 중지되었습니다. 다음날 오류가 다시 발생했습니다.

수정 2를 적용했고 같은 일이 발생했습니다. 다음 날까지 더 이상 오류가 없습니다.

<cfqueryparam>을 사용할 때마다 준비된 문이 자동으로 사용되지만 쿼리가 사용될 때마다 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> 

주셔서 감사합니다 오류에 관해서

+0

http 로그를 확인하고 url.id 값이 있는지 확인하십시오. 또는 url.id를 빈 문자열로 설정하고 쿼리를 시도하십시오. 동일한 오류 메시지가 표시되는지 확인하십시오. –

+0

로그에서 모든 경우 url.ID는 정수로 설정되었습니다. 값이 ""인 쿼리를 실행하면 CFSQLTYPE CF_SQL_INTEGER에 대해 '잘못된 데이터'가 생성되었습니다. – blippoids

+0

어두운 곳에서 촬영되었지만 실제로는 SELECT SELECT FROM ... 또는 SELECT * FROM ...을 사용합니다. 후자의 경우, grins는'*'대신에 열리스트를 지정해보십시오. – Leigh

답변

1

.. 아마도 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> 
+0

버전 8 또는 이전 버전에서 cfqueryparam과 함께이 솔루션을 사용할 수 있다고 생각하지 않습니다. – XaxD

+0

(편집) 아니요. 완전히 다른 유형의 캐싱입니다. [쿼리 * 결과 *가 CF 메모리에 저장되는 시간]을 나타냅니다 (http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSc3ff6d0ea77859461172e0811cbec22c24-746f.html#WSFD7C6646-3A9E-4088-9667- EC00D5AE041D). 그것은 [prepared statements] (http://en.wikipedia.org/wiki/Prepared_statement)와는 관련이 없습니다. – Leigh

+0

그것이 의미가 있든 없든, 'cachedwithin' 픽스는 오류의 발생을 90 % 정도 줄였습니다. 이는 허용 가능한 수준입니다. 모두에게 감사드립니다. – blippoids

1

: 나는 #의 DSN 번호의 값이 다음에 하나 개의 요청으로 변경하는 경우 그 전에 오류를 본 적이있다. 그렇지 않은 경우에도 여전히 사용자가 있으므로 CF 업데이트를 적용 해보세요.

질문과 관련하여 : "최대 풀링 된 문"을 0으로 설정하십시오. 이렇게 할 때마다 CF가 문을 다시 준비해야합니다. 또한 "연결 유지"의 선택을 취소하면 각 요청에 대해 DB 연결이 다시 협상되므로 다시 컴파일해야합니다.

또한 기술 노트에서 SQL Server는 CF에서 수행하는 작업과 상관없이 항상 실행 계획을 캐시합니다. CF는 준비된 명령문에 대한 핸들을 붙잡고 있으므로 매번 전선을 통해 SQL을 전달할 필요가 없습니다. 위의 예는 항상

+0

브래드, 입력 주셔서 감사합니다; #dsn #이 변경되지 않았는지 확인하고 설정했습니다. 안타깝게도 서버의 설정을 변경하거나 업데이트를 적용 할 수 없습니다 (그 이유는 기술적이지 않습니다). – blippoids

0

이 바보 들릴 수도에서 캐시에서 쿼리를 유지합니다,하지만 당신은 생각했다

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

당신은 당신의 cfquery를 문에 CachedWithin 속성을 설정할 수 있습니다

+0

롭, 나는이 장면을줬고 오류 발생을 줄이지 않았다. 그것은 시도의 가치가 명확했다 (나는 낯선 것들이 오류를 던지는 것을 보았다) 감사합니다. – blippoids

관련 문제