允许一个连接上有多个事务



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

代码的一部分是进行一些插入和更新,我想用事务来控制这些插入和更新。这是代码中处理业务逻辑的部分。

代码的另一部分是进行一些插入和更新,这更像是我希望在插入时立即提交的系统支持逻辑。具体来说,这段代码是在程序启动时插入一行,并用末尾更新该行。它还将某些事件记录在代码中。我不希望这些记录的事件仅仅因为业务逻辑中出现故障而消失。

我试着用SqlCommand做这样的业务逻辑:

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

系统逻辑如下:

SqlCommand command = new SqlCommand(sql, connection);

但我得到了这个错误:

ExecuteNonQuery要求命令在分配给命令的连接处于挂起的本地事务中。

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

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

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

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

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

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

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

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

结果证明代码非常干净。

最新更新