2011-01-21 33 views
1

我目前正在使用VB.NET 2.0中的遺留項目。 該項目有一個非常有趣的DAL層,它不包含交易: - | 無論如何,我的工作是讓程序的某些部分成爲事務性的,並且我不需要 就可以訪問DAL層代碼。 所以我試圖把整段代碼放在一個TransactionScope中。TransactionScope中的SqlException

現在就是這個問題: 當從DAL層內部的某個位置拋出SqlException時,我的事務總是被回滾!即使我在同一個TransactionScope中捕獲並處理異常。

我的問題:這是正常的行爲? 有什麼我可以做的呢?

我認爲當異常超出TransactionScope的範圍時拋出事務是正常的,但如果在這些範圍內處理異常,則不會發生異常!

任何幫助將不勝感激!

編輯:SqlException實際上是從一個System.Data.Common.SqlCommand中拋出,所以我不能真正阻止它發生。

問候, LDX

回答

0

好了,我要收回我的答案下面有,我已經編輯,以避免任何混淆超過neccessary ... :)

經過測試,我確定如果正常異常被捕獲並處理(不重新拋出),交易將按預期完成。可能某些類別的異常(例如參與該事務的sql異常)可能會始終使根作用域中的事務無效,即使處理了,但我沒有測試過,因此無法證實該理論。

對不起!

是的,這似乎是由設計。來自transactionScope文檔:

[剪下錯誤信息]