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