[英]ExecuteNonQueryAsync and commit in a SQL Transaction
我正在帮助我创建一段代码,我试图在事务中从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
关键字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();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.