ExecuteNonQueryAsync 并在 SQL 事务中提交

ExecuteNonQueryAsync and commit in a SQL Transaction

我在获得有关我创建的一段代码的帮助后,我正尝试在事务中从 c# 进行异步 SQL 调用,例如,我可能正在更新或删除 table.

这是我目前所知道的,但我似乎找不到太多关于在事务中执行此操作的信息,从我在这里所拥有的和我目前所了解的,我相信它可能会尝试在之前提交事务如果命令耗时,则该命令已完全完成。如果您能给我建议/指出一个例子,我将不胜感激。

var sqlQuery = "delete from table";
        using (var connection = new SqlConnection(ConnectionString))
        {
            await connection.OpenAsync();
            using (var tran = connection.BeginTransaction())
            {
                using (var command = new SqlCommand(sqlQuery, connection, tran))
                {
                    await command.ExecuteNonQueryAsync();
                    tran.Commit();
                }
            }
        }

谢谢,

您的代码看起来不错。我刚刚在命令的执行中添加了一个 try/catch ,这样你就可以在它失败时回滚你的事务。因为您在行 await command.ExecuteNonQueryAsync(); 上使用了 await 关键字,所以无论需要多长时间,执行都会阻塞直到方法 returns (除非您从命令本身获得超时异常,在这种情况下您应该将命令的执行超时设置得更高或弄清楚为什么会花费这么长时间。

    var sqlQuery = "delete from table";
    using (var connection = new SqlConnection(ConnectionString))
    {
        await connection.OpenAsync();
        using (var tran = connection.BeginTransaction())
        using (var command = new SqlCommand(sqlQuery, connection, tran))
        {
            try {
                await command.ExecuteNonQueryAsync();
            } catch {
                tran.Rollback();
                throw;
            }
            tran.Commit();
        }
    }