c# - ExecuteNonQueryAsync 并在 SQL 事务中提交

标签 c# ado.net

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

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

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 关键字,所以无论需要多长时间,执行都会阻塞直到方法返回(除非超时命令本身的异常,在这种情况下,您应该将命令的执行超时设置得更高或弄清楚为什么它需要这么长时间。

    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();
        }
    }

关于c# - ExecuteNonQueryAsync 并在 SQL 事务中提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36040111/

相关文章:

c# - Autofac:类型 '...' 不可分配给服务 '...' 。

c# - LINQ GroupBy x 其中有多个 x 并且 y 是唯一的

c# - 在 asp.net c# 中使用 javascript 从具有单选按钮的 gridview 列获取值

c# - Linq - 获取数组最后一个非零数的索引

c# - 捕获 "Operation cancelled by user"异常的最佳方法是什么

tsql - 使用 -1 作为输出 SqlParameter 的大小来检索 VARBINARY(max) 值是否正确?

sqlite - 在 Win 7 上安装 SQLite ADO.NET 时出错

c# - 为什么我的 Grid Tapped 事件没有被调用?

c# - 在我的 C# 代码中为 SqlCommand 替换 SqlDataAdapter

oracle - 如何使用 Oracle.ManagedDataAccess.EntityFramework 提供程序从不同架构中选择表?