Нетранзакционное выполнение в TransactionScope - PullRequest
0 голосов
/ 21 февраля 2012

Я выполняю несколько хранимых процедур из TransactionScope.Есть ли способ выполнить SqlCommand (хотя он все еще находится в области действия оператора using), но удалить его из транзакции?

Существуют SqlCommands, выполняемые до и после него, которые должны находиться в одной транзакции.

Ответы [ 4 ]

2 голосов
/ 21 февраля 2012

Вам нужно будет открыть другое соединение и выполнить там свое заявление. Но будьте осторожны: этот оператор не увидит никаких изменений по сравнению с незафиксированной транзакцией.

1 голос
/ 22 февраля 2012

Вы можете создать новый экземпляр SqlConnection с параметром соединения ' Enlist ', установленным на 'false'

SqlConnectionStringBuilder csBuilder = new SqlConnectionStringBuilder(existingCon.ConnectionString);
csBuilder.Enlist = false;
SqlConnection newConnection = new SqlConnection(csBuilder.ConnectionString);     
SqlCommand commandNotInTheTx = newConnection.CreateCommand();
1 голос
/ 21 февраля 2012

Вам необходимо создать новую область и указать параметр Supress.

0 голосов
/ 21 февраля 2012

IIRC, для транзакции требуется, чтобы соединения были членами одного пула соединений.Если вы используете немного другую строку подключения для второго подключения (возможно, с использованием другого Application Name), это может позволить ему обойти зачисление.

Только будьте осторожны, вы случайно не начнете использовать распределенные транзакции иDTC.

...