2009-06-25 2 views
6

Скажем, хранимая процедура на сервере MSSQL использует транзакцию SQL с использованием BEGIN TRANSACTION/COMMIT TRANSACTION, как это отличается от начала и назначения одного с помощью ADO.NET через SqlConnection.BeginTransaction()?В чем разница между транзакцией SQL на уровне хранимой процедуры и одной на уровне SqlConnection?

ответ

3

Для ADO.NET это не имеет значения. Это неявно указано в MSDN, где для объекта SqlTransaction метод Commit называется «fail, если транзакция уже откатна на сервере».

Кроме того, SQL Server Profiler показывает «УСТАНОВИТЬ УРОВЕНЬ ИЗОЛЯЦИИ УСТАНОВКИ ПЕРЕДАЧИ КОМАНДЫ, НАЧАТЬ TRAN», как только вы выполните .BeginTransaction при соединении.

Для ADO (не .NET), однако, это не так. Это использовалось для обеспечения хороших сценариев с эффективными вложенными транзакциями (серверный транс был вложен внутри клиентских). Несмотря на то, что я использовал это много, я не могу точно определить, что такое «клиентская транзакция».

2

Если вы собираетесь вызывать несколько хранимых proc в строке и хотите иметь возможность отката, вам необходимо управлять транзакцией из вашего кода с помощью SqlConnection.BeginTransaction(). В противном случае это одно и то же.

Смежные вопросы