C #: транзакция SQL - PullRequest
       23

C #: транзакция SQL

1 голос
/ 24 июня 2011

Возможно ли получить текущую транзакцию SQL в c #, когда соединение было закрыто?

sqlTransaction.Save("savePoint"); 
sqlConnection.Close()              // im purposely closing it to test 

if (sqlConnection.State == ConnectionState.Close)
{
    sqlConnection.Open():

   // is it possible to resume the sql transaction when I re-open    
   // the sql connection? how? 
}

Ответы [ 4 ]

5 голосов
/ 24 июня 2011

Никакой SQL Server не выполнит откат любых незафиксированных транзакций, когда соединение будет разорвано.

3 голосов
/ 24 июня 2011

SqlTransaction.Save не «сохраняет» транзакцию, вместо этого она создает точку сохранения транзакции, которая является чем-то совершенно другим:

Создает точку сохранения в транзакции которые могут быть использованы для отката части транзакции и указывает имя точки сохранения.

Точку сохранения можно использовать за до транзакции совершено, чтобы частично откатить часть работы, выполненной транзакцией. Типичным примером может быть попытка выполнить обновление, которое может завершиться неудачей, поэтому вы создаете точку сохранения перед выполнением обновления, а в случае сбоя вы возвращаетесь к точке сохранения, тем самым сохраняя всю работу, выполненную до Точка сохранения.

См. Обработка исключений и вложенные транзакции для примера использования точек сохранения.

Теперь вернемся к вашему вопросу: существует ли способ для соединения, чтобы начать соединение, закрыть его, а при повторном открытии выбрать такую ​​же транзакцию ? Технически это происходит с использованием (сейчас не рекомендуется) sp_getbindtoken и sp_bindsession. Но это просто любопытство, для вас нет абсолютно никакого действительного сценария попытки «повторно использовать» транзакцию в двух разных сеансах (два повторных открытия соединения).

1 голос
/ 24 июня 2011

Это неправильное понимание транзакции базы данных. Транзакции - это беседы типа «все или ничего» с базой данных. Если вы закрываете линию связи с базой данных, закрывая соединение, разговор заканчивается и изменения не фиксируются (часть «ничего» в «все или ничего»).

0 голосов
/ 24 июня 2011

Нет, я не думаю, что вы можете сделать это.

...