2010-02-23 2 views
2

ColdFusion 8 이하 버전에서는 표시된 줄이 올바른 위치에 있습니까?cftry/cfcatch 모범 사례

<cftry> 
    <cfquery name="local.qry" datasource="myDatasource"> 
    SELECT ID FROM TableName 
    WHERE ... 
    </cfquery> 
    <cfset local.result = local.qry.ID><!--- this line! ---> 
    <cfcatch> 
    <cfset local.result = Variables.objDatabase.CatchError(cfcatch)> 
    </cfcatch> 
</cftry> 

<cfreturn local.result> 
+1

@cf_PhillipSenn : 구문 강조 표시를 수정하고 그것을 쉽게 복사/붙여 넣기 할 수 있도록 샘플을 편집했습니다. 싫어하면 롤백하십시오. – Tomalak

+1

왜이 오류 처리를 지역화하고 있습니까? DB 문제 (이 모든 경우에 예외가 발생합니다)가있는 경우, 숨기는 것이 매우 합리적인 일이라고 생각하지 않습니다. 그냥 요청을 죽게 내버려두고 전역 오류 처리기를 처리하도록하십시오. –

+0

나는 cftry에 대해 읽었으며 그것을 내 프로그램에 넣어야한다고 생각했습니다. –

답변

5

예. 블록 밖에서 설정할 수도 있지만 그 이유는 무엇입니까? 적어도 이렇게하면 할당 중에 발생할 수있는 기괴한 오류를 포착하게됩니다. 가능성은 없지만 쿼리가 성공할 수 있고 과제가 실패 할 수 있으므로 잠재적 인 문제를 해결하지 않는 이유는 무엇입니까?

이미 try/catch의 오버 헤드가 있으므로 try 블록에도 할당을 추가 할 수 있습니다.

+3

@Shawn : 과제가 실패 할 수 있다면, 모든 과제를 try-catch 블록으로 지켜야합니까? 이 과제와 같은 과제가 실패 할 경우, try-catch 블록이 도움이되지 않는 심각한 문제가 발생합니다. – Tomalak

+2

그것은 매우 드문 일입니다. 그리고 아니, 모든 과제를 시도하거나 잡는 것을 미쳐 버리자. 나는이 특별한 경우에 당신이 거기에 과제를 적용 할 수도 있다고 말하고 있습니다. 그리고 에 local.result를 설정하는 것도 올바른 생각입니다. 그렇지 않으면 이 실패합니다. 실제로 이 아닌 을 두 위치에서 모두 수행하고 최종 을 남길 수 있습니다. 그런 다음 아무 것도 지정할 필요가 없습니다. –

+0

그가 블록 밖으로 지정할 수 있습니까? 나는 그것이 쿼리가 실패하면 local.qry.ID가 정의되지 않은 또 다른 예외를 발생시킬 것이라고 생각한다. – Soldarnal