假設我有一個 C# 類,它為數據庫創(chuàng)建一個事務,然后調用一個存儲過程。int = 1如果出現錯誤,存儲過程將返回。假設我們更新了一個表,但隨后返回 1,因為 SP 中的某個地方發(fā)生了錯誤。然后,這會在 C# 中引發(fā)異常,該異常會調用一個方法來回滾事務,但在該方法的 FINALLY 塊中,我們提交事務。由于事務已回滾,那么當我們調用 commit 時會發(fā)生什么?
2 回答

慕運維8079593
TA貢獻1876條經驗 獲得超5個贊
如果您回滾事務,則該事務中所做的所有更改都會...回滾、取消。所以你在finally塊中的提交不會做任何事情,至少當你沒有其他事務等待時。
我不會將提交方法放在finally塊中,我會在try塊末尾提交事務并在catch塊中回滾。

森林海
TA貢獻2011條經驗 獲得超2個贊
我想建議您在存儲過程中也使用事務以及 try catch 塊。
我已經確認回滾后我們無法提交相同的事務。
確保另一個事務沒有處于等待狀態(tài),否則它將被提交。
也不要對finally 塊中的事務執(zhí)行任何操作。始終使用finally塊來關閉連接、數據讀取器等。
始終在 try 塊中提交并在 catch 塊中回滾。
- 2 回答
- 0 關注
- 187 瀏覽
添加回答
舉報
0/150
提交
取消