2011-08-19 97 views
2

在C#中,我在一個將數據插入數據庫的方法中有三條語句。第一條語句插入,我從中得到一個ID。這個ID在接下來的兩個語句中使用。如果一個失敗時如何回滾3個語句?

我有兩個問題需要處理:

1)如果某些輸入條件得不到滿足第二條語句可以返回false。在這種情況下,我想回滾第一條語句。
2.)如果其中任何一個語句產生錯誤,它們應該全部回滾。

我想將所有三個語句都包含在一個事務範圍中,但它只會回滾異常,這隻會覆蓋第二種情況。處理這兩種情況的最佳方式是什麼?

我通過使用DBML用的DataContext LINQ 2 SQL

+0

我不知道c#SQL,但在mysql中有一種方法可以毫無例外地回滾事務 – Dani

+4

爲什麼你認爲它只是異常回滾?你必須明確提交。你知道在什麼情況下你不想提交。 dot dot dot –

+0

這三個語句中的每一個都是提交的方法。 – 4thSpace

回答

5

用的TransactionScope()需要調用完成()方法來提交更改。 不然,所有待處理的更改將回滾,因此您的(1)也被覆蓋了

0

可以使用RAISERROR語句,用正確的嚴重性級別(18我認爲應該這樣做),以「拋出一個異常」,使你的交易在用戶檢查的條件下回滾。

很顯然,這隻會在同一事務範圍內回滾任何東西。

1

看看我發佈的鏈接。它很簡單的手動回滾事務

How to Commit and Rollback Transaction in .NET

它的JIST是,你有你的交易對象後,就可以調用它的RollBack()

對LINQ到SQL看看How to: Bracket Data Submissions by Using Transactions (LINQ to SQL)

+0

這看起來不錯,但我沒有使用ADO.NET。我通過DBML和LINQ 2 SQL使用DataContext。 – 4thSpace

+0

在我的答案底部添加了linq2sql的鏈接 –

+0

錯誤鏈接404如何在.NET中提交和回滾事務 –