我有正在访问数据库的控制台c#程序。
部分代码正在执行一些我想通过事务控制的插入和更新。这是处理业务逻辑的代码部分。
代码的另一部分正在进行一些插入和更新,这是我想在插入时立即提交的更多系统支持逻辑。具体来说,这段代码是在程序启动时插入一行,并在结尾处更新该行。它还将某些事件记录在代码中。我不希望这些已记录的事件消失,只是因为业务逻辑失败。
我试图像这样用SqlCommand进行业务逻辑:
SqlCommand command = new SqlCommand(sql, connection, transaction);
和这样的系统逻辑:
SqlCommand command = new SqlCommand(sql, connection);
但是我得到这个错误:
ExecuteNonQuery要求命令在以下情况下具有事务 分配给命令的连接处于未决的本地事务中。
我的目标是让业务逻辑仅在transaction.Commit()
上提交,而系统逻辑则立即提交。
我可以通过两个单独的交易来完成吗?
我需要打开两个不同的连接吗?
答案 0 :(得分:0)
最后,我创建了两个不同的连接:一个用于基于事务的IO,另一个用于非事务的IO。
然后我使用如下代码在每个命令上设置事务:
transaction = new connection.BeginTransaction();
someCommand1.Transaction = transaction;
someCommand2.Transaction = transaction;
其中someCommand1 / 2是先前在代码中创建的SqlCommand()。
这避免了多次调用SqlCommand的问题。
原来在代码中非常干净。