我遇到了一个问题,即使没有任何查询引发异常,所做的更改也会被回滚。这很奇怪,因为代码在一个环境中工作,但在另一个环境中没有提交更改。
这是处理事务的函数。当我在提交上设置一个断点时,我点击了提交,我可以看到数据库中的更改,但是当事务被处理时,更改被回滚。
更新:额外的测试表明这不是事务的问题。如果事务从下面的代码中完全删除,则应用程序的行为方式相同。当连接关闭时,更改将被撤消。
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;
}
}
}
}