使用 CFTransaction、CFThrow 和 CFDump 中止回滚

Rollback with CFTransaction, CFThrow and CFDump abort

我已阅读有关 cftransaction 的文档,但无法弄清楚回滚 <cfdump var="#myVar#" abort><cftransaction action="rollback" /><cfthrow message="Error">

之间的区别

假设 var a 是为了示例目的而预设的。 cftransaction 标记内的所有查询仅在使用 cfdump abort 时执行回滚。使用正确的 rollback actioncfthrow 标签,他们 不会 回滚。

我是 CF2016 新手。有人可以向我解释回滚与回滚之间的区别吗?

<cftransaction action="begin">
  ...somecode with querys...
  <cfif a eq 1>
    <cftransaction action="rollback" />
  <cfelseif a eq 2>
    <cfthrow message="Error">
  <cfelse>
    <cfdump var="Error" abort>
  </cfif>
</cftransaction>

尝试在执行回滚操作之前设置 save-point...我不是 100% 确定您是否需要在实际能够执行回滚之前明确设置它

因为 <cfabort> 停止处理页面,所有在 <cftransaction> 标签中进行的查询都将被反转,无论保存点如何,而使用 <cftransaction action="rollback" /> 你可以重置它查询集中的特定点。

例如考虑以下流程

<cftransaction> 
 <Query 1 > 
 <Query 2 > 
 <cftransaction action = "setsavepoint" savepoint = "#point#"/> 
  <Query 3 > 
 </cftransaction>

如果查询 3 因 <cftransaction action="rollback" savepoint="#point#" /> 失败,您可以回滚到不必重做 <Query 1 > <Query 2 > 的点,只需担心 <Query 3 > 通过不重复为您节省一些开销那些查询。在 CFDUMP 中使用 CFABORT 它将中止整个事务

本页最后一个带有提款的示例显示了保存点的使用 https://helpx.adobe.com/coldfusion/cfml-reference/coldfusion-tags/tags-t/cftransaction.html