我已阅读有关cftransaction的文档,但无法弄清回到<cfdump var="#myVar#" abort>
,<cftransaction action="rollback" />
或<cfthrow message="Error">
假设var a
已预设用于示例目的。 cftransaction
标记内的所有查询仅在使用cfdump abort
时进行回滚。使用正确的rollback action
或cfthrow
标记,他们不回滚。
我是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>
答案 0 :(得分:1)
尝试在执行回滚操作之前设置一个保存点...我不是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