2011-08-19 67 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中提交和回滚事务 –