嗯,有真的只有三個基本程序流:序列(步驟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