Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果一条语句失败,如何回滚3条语句?_C#_.net_Linq To Sql - Fatal编程技术网

C# 如果一条语句失败,如何回滚3条语句?

C# 如果一条语句失败,如何回滚3条语句?,c#,.net,linq-to-sql,C#,.net,Linq To Sql,在C#中,我在一个方法中有三条语句,用于将数据插入数据库。第一条语句插入,我从中得到一个ID。在接下来的两个语句中使用此ID 我有两个案子要处理: 1.)如果不满足某些输入条件,则第二条语句可能返回false。在这种情况下,我想回滚第一条语句。 2.)如果其中任何一条语句生成错误,它们都应该回滚 我曾想过将所有三条语句包装在一个事务范围内,但它只会在异常时回滚,这只涉及第二种情况。处理这两种情况的最佳方法是什么 我通过一个带有LINQ 2 SQL的DBML使用DataContext,您可以使用具

在C#中,我在一个方法中有三条语句,用于将数据插入数据库。第一条语句插入,我从中得到一个ID。在接下来的两个语句中使用此ID

我有两个案子要处理:

1.)如果不满足某些输入条件,则第二条语句可能返回false。在这种情况下,我想回滚第一条语句。
2.)如果其中任何一条语句生成错误,它们都应该回滚

我曾想过将所有三条语句包装在一个事务范围内,但它只会在异常时回滚,这只涉及第二种情况。处理这两种情况的最佳方法是什么

我通过一个带有LINQ 2 SQL的DBML使用DataContext,您可以使用具有正确严重性级别(我认为应该是18)的语句来“抛出异常”,并在用户检查的条件下使事务回滚


显然,这只会回滚相同事务范围内的任何内容。

看看我发布的链接。手动回滚事务非常简单

它的jist是在拥有事务对象之后,可以调用它

对于Linq To Sql,请使用TransactionScope()查看一下

,您需要调用Complete()方法来提交更改。
否则,所有挂起的更改都将回滚,因此您的(1)也将被覆盖

我不知道c#SQL,但在mysql中有一种方法可以毫无例外地回滚事务。为什么您认为它只在异常情况下回滚?您必须显式地提交。你知道在什么情况下你不想犯罪。dot dot dot这三条语句中的每一条都是进行提交的方法。@4thSpace
BEGIN-TRAN
移出一级,而
commit
退回一级<代码>回滚向后移动所有级别。因此,如果您将三个事务嵌套在一个超级事务中,则在提交超级事务之前不会提交任何内容,但如果任何内容回滚,则会回滚所有内容。听起来您指的是直接在数据库中工作。我只是指.NET代码。看起来不错,但我没有使用ADO.NET。我通过一个带有LINQ 2 SQL的DBML使用DataContext。在我的answerBad链接404的底部添加了关于如何在.NET中提交和回滚事务的linq2sql链接