Coldfusion cftry/cfcatch的最佳实践

Coldfusion cftry/cfcatch的最佳实践,coldfusion,error-handling,Coldfusion,Error Handling,在ColdFusion 8或更低版本中,标记行是否位于正确的位置 <cftry> <cfquery name="local.qry" datasource="myDatasource"> SELECT ID FROM TableName WHERE ... </cfquery> <cfset local.result = local.qry.ID><!--- this line! ---> <cfc

在ColdFusion 8或更低版本中,标记行是否位于正确的位置

<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>

从TableName中选择ID
哪里

是。你可以把它放在街区外,但为什么?至少通过这种方式,您可以捕捉到分配过程中可能出现的任何奇怪错误。这不太可能,但是查询可能成功,分配可能失败,那么为什么不抓住这个潜在的问题呢


您已经有了try/catch的开销,还不如将赋值添加到try块。

@cf\u PhillipSenn:我已经编辑了示例,以修复语法突出显示,并使其易于复制/粘贴。如果不喜欢,请回滚。为什么要将此错误处理本地化?如果您有一个DB问题(在本例中,这几乎会导致一个异常),我认为隐藏它不是一件非常明智的事情。让请求消失,让全局错误处理程序来处理它。我读到了关于cftry的文章,想我应该把它放到我的程序中。@Shawn:如果分配可能失败,你所做的每一个分配不是都必须用try-catch块来保护吗?当像这样的作业失败时,你会遇到严重的问题,try-catch块帮不了你。这是肯定的,这是极不可能的。不,我们不要为每一项作业都做尝试/捕捉而发疯。我只是说,在这种特殊情况下,你不妨在那里应用作业。在中设置local.result也是正确的想法,否则将失败。事实上,你可以在两个地方都这样做,而不是放弃决赛。那你就不需要分配任何东西了。你确定他可以在街区外分配吗?我认为如果查询失败,它会引发另一个异常,即local.qry.ID未定义。