В моем коде С# я использую TransactionScope, потому что мне сказали не полагаться, что мои программисты sql всегда будут использовать транзакции, а мы ответственны и yada yada.
Сказав, что
Похоже, что объект TransactionScope откатывается перед SqlTransaction? Возможно ли это, и если да, то какая правильная методология для переноса TransactionScope в транзакцию.
Вот тест sql
CREATE PROC ThrowError
AS
BEGIN TRANSACTION --SqlTransaction
SELECT 1/0
IF @@ERROR<> 0
BEGIN
ROLLBACK TRANSACTION --SqlTransaction
RETURN -1
END
ELSE
BEGIN
COMMIT TRANSACTION --SqlTransaction
RETURN 0
END
go
DECLARE @RESULT INT
EXEC @RESULT = ThrowError
SELECT @RESULT
И если я запустил это, я получаю только деление на 0 и возвращаю -1
Вызов из кода С# Я получаю дополнительное сообщение об ошибке
Деление на нулевую ошибку. Счет транзакции после EXECUTE указывает на отсутствие привязки COMMIT или ROLLBACK TRANSACTION. Предыдущий счетчик = 1, текущий счетчик = 0.
Если я дам транзакции sql имя, то
Нельзя отменить SqlTransaction. Не найдено ни одной транзакции или точки сохранения этого имени. Счет транзакции после EXECUTE указывает, что COMMIT или ROLLBACK Отсутствует инструкция TRANSACTION. Предыдущий счетчик = 1, текущий счетчик = 2.
несколько раз кажется, что счетчик увеличивается, пока приложение полностью не выйдет из
С# просто
using (TransactionScope scope = new TransactionScope())
{
... Execute Sql
scope.Commit()
}
EDIT:
Код sql должен работать в течение 2000 и 2005 годов