В чем разница между транзакцией SQL на уровне хранимой процедуры и транзакцией на уровне SqlConnection? - PullRequest
6 голосов
/ 26 июня 2009

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

Ответы [ 2 ]

3 голосов
/ 26 июня 2009

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

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

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

2 голосов
/ 26 июня 2009

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

...