Sql server 允许在一个连接上进行多个事务

Sql server 允许在一个连接上进行多个事务,sql-server,Sql Server,我有一个正在访问数据库的控制台c#程序 代码的一部分是执行一些插入和更新,我希望通过事务控制这些插入和更新。这是处理业务逻辑的代码部分 代码的另一部分是执行一些插入和更新,这些插入和更新更符合我希望在插入时立即提交的系统支持逻辑。具体来说,这段代码是在程序启动时插入一行,并用结尾更新该行。它还将某些事件记录在代码中。我不希望这些记录的事件仅仅因为业务逻辑中出现故障而消失 我尝试使用SqlCommand执行业务逻辑,如下所示: SqlCommand command = new SqlCommand

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

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

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

我尝试使用SqlCommand执行业务逻辑,如下所示:

SqlCommand command = new SqlCommand(sql, connection, transaction);
SqlCommand command = new SqlCommand(sql, connection);
系统逻辑如下:

SqlCommand command = new SqlCommand(sql, connection, transaction);
SqlCommand command = new SqlCommand(sql, connection);
但我得到了这个错误:

ExecuteOnQuery要求命令在以下情况下具有事务: 分配给该命令的连接位于挂起的本地事务中

我的目标是让业务逻辑仅在
transaction.commit()时提交,并让系统逻辑立即提交

我可以通过两个单独的事务来完成吗


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

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

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

transaction = new connection.BeginTransaction();
someCommand1.Transaction = transaction;
someCommand2.Transaction = transaction;
其中someCommand1/2是以前在代码中创建的SqlCommand()s

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


事实证明,代码非常干净。

为什么您指的是立即提交的系统逻辑???事务位于数据库级别。我认为您对这种情况下的交易含义感到困惑。听起来你需要两个完全独立的工作。如果是这种情况,那么您应该使用两个连接,每个连接都有自己的事务。我认为他需要两个命令以及两个连接。如果一个连接使用一个SqlCommand()和一个事务,那么所有SqlCommand()都是真的吗s需要一个事务吗?一个连接不能有多个事务也是真的吗?@PabloHenkowski嵌套事务在很大程度上是独角兽的神话。它们不是真的。