在c#中有什么等价于SQL的回滚事务?

在c#中有什么等价于SQL的回滚事务?,c#,asp.net,sql,C#,Asp.net,Sql,如果在事务中发生任何错误 sql将回滚进程 BEGIN TRANSACTION COMMIT IF @@TRANCOUNT > 0 ROLLBACK END TRANSACTION 如何在asp.net C#中执行相同的操作?以下代码片段显示了大致思路: using (SqlConnection connection = new SqlConnection("connection string")) using (SqlTransaction transacti

如果在事务中发生任何错误

sql将回滚进程

BEGIN TRANSACTION

 COMMIT

 IF @@TRANCOUNT > 0
        ROLLBACK

END TRANSACTION

如何在asp.net C#中执行相同的操作?

以下代码片段显示了大致思路:

using (SqlConnection connection = new SqlConnection("connection string"))
using (SqlTransaction transaction = connection.BeginTransaction())
using (SqlCommand command = new SqlCommand("command text", connection) { Transaction = transaction })
{
    connection.Open();
    try
    {
        command.ExecuteNonQuery();
        transaction.Commit();
    }
    catch
    {
        transaction.Rollback();
        throw;
    }
}

如果命令无法执行并引发任何异常,事务将回滚。

下面的代码片段显示了一般思路:

using (SqlConnection connection = new SqlConnection("connection string"))
using (SqlTransaction transaction = connection.BeginTransaction())
using (SqlCommand command = new SqlCommand("command text", connection) { Transaction = transaction })
{
    connection.Open();
    try
    {
        command.ExecuteNonQuery();
        transaction.Commit();
    }
    catch
    {
        transaction.Rollback();
        throw;
    }
}

如果该命令无法执行并引发任何异常,则事务将回滚。

请查看下面的内容,了解如何使用事务作用域实现隐式事务,它将为您提供C#格式的事务。如果调用
TransactionScope
的Complete方法,它将被提交,否则将回滚


查看下面的内容,了解如何使用事务作用域实现隐式事务,它将为您提供C#中的事务。如果调用
TransactionScope
的Complete方法,它将被提交,否则将回滚


我真的觉得你的问题不够清楚。这里有一些我想分享的东西。我想你是在问这个

在SQL中,想象一下这样的情况(不是真正的语法):

现在,假设表A中没有列b,因此该事务将无法工作

为了在ASP.Net中实现同样的功能,您几乎无法控制实际的数据库事务,我建议将try/catch和事务结合起来。不是因为这是正确的方法,而是因为它可以做你想做的事


同样,这不是正确的方法。告诉更多关于你的问题,更多的人可以帮助你。

我真的觉得你的问题不够清楚。这里有一些我想分享的东西。我想你是在问这个

在SQL中,想象一下这样的情况(不是真正的语法):

现在,假设表A中没有列b,因此该事务将无法工作

为了在ASP.Net中实现同样的功能,您几乎无法控制实际的数据库事务,我建议将try/catch和事务结合起来。不是因为这是正确的方法,而是因为它可以做你想做的事


同样,这不是正确的方法。告诉更多关于您的问题的信息,更多的人可以提供帮助。

您想回滚什么?请看一看,您发布的代码似乎总是会提交事务,因为在if检查之前调用commit。@Tim它以“BEGIN transaction”开头,因此它提交嵌套事务,然后可能回滚外部事务。(这太令人困惑了,所以不要这样做。)@hvd-Ah,谢谢。我忘记了嵌套事务。您想回滚什么?顺便说一句,您发布的代码看起来总是会提交事务,因为commit是在if检查之前调用的。@Tim它以“BEGIN transaction”开头,因此它提交嵌套事务,然后可能回滚外部事务。(这太令人困惑了,所以不要这样做。)@hvd-Ah,谢谢。我忘记了嵌套事务。