我在获得有关我创建的一段代码的帮助后,我正尝试在事务中从 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/