我在TransactionScope中执行多个存储过程。有没有办法执行SqlCommand(虽然仍在使用语句的范围内),但将其从事务中移除?TransactionScope中的非事务性执行
在它之前和之后执行的SqlCommands需要在一个事务中执行。
我在TransactionScope中执行多个存储过程。有没有办法执行SqlCommand(虽然仍在使用语句的范围内),但将其从事务中移除?TransactionScope中的非事务性执行
在它之前和之后执行的SqlCommands需要在一个事务中执行。
您可以设置为“假”的“Enlist”连接参数创建一个新的SqlConnection实例
SqlConnectionStringBuilder csBuilder = new SqlConnectionStringBuilder(existingCon.ConnectionString);
csBuilder.Enlist = false;
SqlConnection newConnection = new SqlConnection(csBuilder.ConnectionString);
SqlCommand commandNotInTheTx = newConnection.CreateCommand();
你必须打开另一个连接并在那里执行你的语句。但要小心:该声明不会看到未提交事务的任何更改。
声明是已经有一个单独的连接,但由于它是用的TransactionScope的using语句。 NET试图把它放在同一个事务中。任何想法如何创建一个不使用事务的连接? – DJCasey 2012-02-21 05:56:18
IIRC,事务登记要求连接成为同一连接池的成员。如果对第二个连接使用稍微不同的连接字符串(可能使用不同的Application Name
),则可能会使其绕过征募。
只要小心,不要不小心开始使用分布式事务和DTC。
您需要创建一个新的作用域并指定Supress
选项。
另外,如果您知道给定的连接应始终避免环境事务,则可以将“Enlist = false”放入配置中的连接字符串中,并避免任何额外的编码或连接管理。此链接适用于.NET 1.1,但征集部分仍然准确,我相信:http://msdn.microsoft.com/en-us/library/aa720033(v=vs.71).aspx – 2012-05-03 17:16:56