ExecuteNonQueryAsync并在SQL事务中提交

Dav*_*d B 6 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();
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)

谢谢,

Igo*_*gor 8

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

    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();
        }
    }
Run Code Online (Sandbox Code Playgroud)

  • **tran.Commit()** 中的命令超时可能会出现异常 (3认同)