gpt4 book ai didi

c# - 为什么在调用提交函数时 SqlTransaction 可能会提交失败?

转载 作者:太空宇宙 更新时间:2023-11-03 15:47:06 25 4
gpt4 key购买 nike

我遇到了一个问题,即使没有任何查询引发异常,所做的更改也会被回滚。这很奇怪,因为代码在一个环境中工作但不在另一个环境中提交更改。

这是处理事务的函数。当我在提交上放置一个断点时,我点击了提交,我可以看到数据库中的更改,但是当处理事务时,更改被回滚。

更新:其他测试表明这不是事务的问题。如果交易从下面的代码中完全删除,应用程序将以相同的方式运行。连接关闭时更改将被撤消。

public bool Transaction(List<string> sqlStatements)
{
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
using (SqlTransaction tran = conn.BeginTransaction())
{
try
{
foreach (string query in sqlStatements)
{
SqlCommand cmd = new SqlCommand(query, conn, tran);
cmd.CommandTimeout = 300;
cmd.ExecuteNonQuery();
}

tran.Commit();

return true;
}
catch (SqlException sqlError)
{
tran.Rollback();
//Log Exception
return false;
}
}
}
}

最佳答案

虽然我很确定,但我最后还是尝试了您的代码,它按预期工作。我再次重申,该方法对于事务处理来说已经足够好了。并且事务一旦提交,就无法回滚。

在上述方法中,事务处理与任何回滚无关。我想,你一直在错误的方向调试。不过,您可以在此处粘贴原始方法,因为您可能正在执行其他一些数据库操作。

突然间,您发出了什么样的查询?请注意,DDL 命令是自动提交的,事务不会生效。

关于c# - 为什么在调用提交函数时 SqlTransaction 可能会提交失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27710479/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com