一次连接允许多笔交易

时间:2018-07-23 17:54:42

标签: sql-server

我有正在访问数据库的控制台c#程序。

部分代码正在执行一些我想通过事务控制的插入和更新。这是处理业务逻辑的代码部分。

代码的另一部分正在进行一些插入和更新,这是我想在插入时立即提交的更多系统支持逻辑。具体来说,这段代码是在程序启动时插入一行,并在结尾处更新该行。它还将某些事件记录在代码中。我不希望这些已记录的事件消失,只是因为业务逻辑失败。

我试图像这样用SqlCommand进行业务逻辑:

SqlCommand command = new SqlCommand(sql, connection, transaction);

和这样的系统逻辑:

SqlCommand command = new SqlCommand(sql, connection);

但是我得到这个错误:

  

ExecuteNonQuery要求命令在以下情况下具有事务   分配给命令的连接处于未决的本地事务中。

我的目标是让业务逻辑仅在transaction.Commit()上提交,而系统逻辑则立即提交。

我可以通过两个单独的交易来完成吗?

我需要打开两个不同的连接吗?

1 个答案:

答案 0 :(得分:0)

最后,我创建了两个不同的连接:一个用于基于事务的IO,另一个用于非事务的IO。

然后我使用如下代码在每个命令上设置事务:

transaction = new connection.BeginTransaction();
someCommand1.Transaction = transaction;
someCommand2.Transaction = transaction;

其中someCommand1 / 2是先前在代码中创建的SqlCommand()。

这避免了多次调用SqlCommand的问题。

原来在代码中非常干净。