Pages

2015-04-25

SQL Transaction錯誤造成的中斷

為了確保整個SQL正常執行,我們程式中通常會把DbCommand包在Transaction裏,再利用try/catch作trans.Rollback()。一般的SQL錯誤(如欄名不正確)等,執行一切正常,但偏偏遇到某些致命錯誤(如int欄位寫入字串,挺常見的!)竟然會讓Transaction中斷,裏頭的Connection會變成null,後面的trans.Rollback()自然就失去效用。

網上很少人提到這詭異現象,只有在stakoverflow有提到此問題,但沒有妥善解決之道。我在210行處重新再取得Trans物件作Rollback,就可以復原挽救第195行的刪除指令了。

image

面對這種奇怪現象,若是常用TransactionScope{}簡易寫法的人,將無法回復錯誤前的指令執行結果,宜注意此狀況。

No comments: