2012-02-21 39 views
0

我在TransactionScope中執行多個存儲過程。有沒有辦法執行SqlCommand(雖然仍在使用語句的範圍內),但將其從事務中移除?TransactionScope中的非事務性執行

在它之前和之後執行的SqlCommands需要在一個事務中執行。

回答

1

您可以設置爲「假」的「Enlist」連接參數創建一個新的SqlConnection實例

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

另外,如果您知道給定的連接應始終避免環境事務,則可以將「Enlist = false」放入配置中的連接字符串中,並避免任何額外的編碼或連接管理。此鏈接適用於.NET 1.1,但徵集部分仍然準確,我相信:http://msdn.microsoft.com/en-us/library/aa720033(v=vs.71).aspx – 2012-05-03 17:16:56

2

你必須打開另一個連接並在那裏執行你的語句。但要小心:該聲明不會看到未提交事務的任何更改。

+0

聲明是已經有一個單獨的連接,但由於它是用的TransactionScope的using語句。 NET試圖把它放在同一個事務中。任何想法如何創建一個不使用事務的連接? – DJCasey 2012-02-21 05:56:18

0

IIRC,事務登記要求連接成爲同一連接池的成員。如果對第二個連接使用稍微不同的連接字符串(可能使用不同的Application Name),則可能會使其繞過徵募。

只要小心,不要不小心開始使用分佈式事務和DTC。

1

您需要創建一個新的作用域並指定Supress選項。

相關問題