TransactionScope中的非事务性执行

时间:2012-02-21 04:16:54

标签: c# asp.net sql-server transactionscope

我正在从TransactionScope中执行多个存储过程。有没有办法执行SqlCommand(虽然仍然在using语句的范围内)但是从事务中删除它?

在它之前和之后执行的SqlCommands确实需要在一个事务中执行。

4 个答案:

答案 0 :(得分:2)

您必须打开另一个连接并在那里执行您的声明。但要注意:该语句不会看到来自未提交事务的任何更改。

答案 1 :(得分:1)

您需要创建一个新范围并指定Supress选项。

答案 2 :(得分:1)

您可以创建一个新的SqlConnection实例,并将“Enlist”连接参数设置为“false”

SqlConnectionStringBuilder csBuilder = new SqlConnectionStringBuilder(existingCon.ConnectionString);
csBuilder.Enlist = false;
SqlConnection newConnection = new SqlConnection(csBuilder.ConnectionString);     
SqlCommand commandNotInTheTx = newConnection.CreateCommand();

答案 3 :(得分:0)

IIRC,事务登记要求连接成为同一连接池的成员。如果您为第二个连接使用稍微不同的连接字符串(可能使用不同的Application Name),则可能允许它绕过登记。

请注意,不要意外地开始使用分布式事务和DTC。