嗯,有真的只有三个基本程序流:序列(步骤1,步骤2等),选择(if-type语句)和迭代(循环)。
如果你没有任何循环,你只剩下选择和顺序。这意味着你的代码很可能将最终看起来像(伪代码,很明显):
perform sql (statement1)
if IsCancellationRequested: return
perform sql (statement2)
if IsCancellationRequested: return
:
:
perform sql (statementN)
if IsCancellationRequested: return
换句话说,没有循环,有把支票在那里它会被称为很多没有单一方便的地方次,你必须自己多次打电话。根据调用的次数,在循环中调用它并没有真正的区别。
如果你的问题是,你不喜欢在你的源代码中穿插许多检查的想法,你可以创建一个函数来为你做,是这样的:
def execSql (sqlStatement):
perform sql (sqlStatement)
return IsCancellationRequested
那么你的线条变得:
if (perform sql (statement1)): return
if (perform sql (statement2)): return
:
if (perform sql (statementN)): return
现在,你也许可以通过把语句转换成某种形式的集合,这样一来,你会添加循环只需要编写一个支票/退货。但这意味着你现在做事情的方式会发生更大的变化。
如果您取消完成的命令时这些命令不在事务中,我相信它们将不会回滚。为什么用户会取消?如果这是一个长时间运行的任务,请考虑使用Progress的BackGroundWorker,以便可以报告已处理了多少个sql语句。 – Paparazzi 2012-03-27 14:27:49
@Blam,也许这些都是'SELECT',所以将它们回滚并不重要? – svick 2012-03-27 16:18:47