我在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