TransactionScope и транзакции
В своем коде на C # я использую TransactionScope, потому что мне сказали не полагаться на то, что мои программисты sql всегда будут использовать транзакции, и мы несем ответственность, и яда яда.
Было сказано, что
Похоже, объект 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
Звони с кода C # я получаю дополнительное сообщение об ошибке
Ошибка деления на ноль.
Число транзакций после EXECUTE указывает на то, что отсутствует надпись COMMIT или ROLLBACK TRANSACTION. Предыдущий счет = 1, текущий счет = 0.
Если я дам имя транзакции sql, то
Невозможно откатить SqlTransaction. Транзакция или точка сохранения с таким именем не найдены. Число транзакций после EXECUTE указывает на отсутствие оператора COMMIT или ROLLBACK TRANSACTION. Предыдущий счет = 1, текущий счет = 2.
иногда кажется, что количество увеличивается, пока приложение полностью не выйдет
C # просто
using (TransactionScope scope = new TransactionScope())
{
... Execute Sql
scope.Commit()
}
РЕДАКТИРОВАТЬ:
SQL-код должен работать на 2000 и 2005