在C#中,我在一个将数据插入数据库的方法中有三个语句。第一个语句插入,我从中获取一个ID。此ID在接下来的两个语句中使用。
我有两个案件要处理:
1。)如果不满足某些输入条件,则第二个语句可以返回false。在那种情况下,我想回滚第一个声明 2.)如果任何一个语句产生错误,它们都应该回滚。
我想将所有三个语句都包装在一个事务范围中,但它只会回滚异常,这只涉及第二种情况。处理这两种情况的最佳方法是什么?
我通过带有LINQ 2 SQL的DBML使用DataContext
答案 0 :(得分:5)
使用TransactionScope(),您需要调用Complete()方法来提交更改。 此外,所有挂起的更改都将被回滚,因此您的(1)也会被覆盖
答案 1 :(得分:1)
看一下我发布的链接。手动回滚事务非常简单
How to Commit and Rollback Transaction in .NET
它的主旨是,在您拥有交易对象后,您可以在其上调用RollBack()
。
对于Linq-To-Sql,请查看How to: Bracket Data Submissions by Using Transactions (LINQ to SQL)
答案 2 :(得分:0)
您可以使用RAISERROR语句,使用正确的严重性级别(18我认为应该这样做)来“抛出异常”,并使您的事务在用户检查的条件下回滚。
显然,这只会回滚同一事务范围内的任何内容。