Вопрос № 61844: Господа!
Обстоятельства вынудили перейти с Firebird + IBX на связку MSSQL + ADO.
Не могу сообразить, как при этом управлять транзакциями.
Мне нужно внести изменения в несколько таблиц, перехватить ошибку (если возникнет) и все откатить.<b...
Вопрос № 61.844
Господа!
Обстоятельства вынудили перейти с Firebird + IBX на связку MSSQL + ADO.
Не могу сообразить, как при этом управлять транзакциями.
Мне нужно внести изменения в несколько таблиц, перехватить ошибку (если возникнет) и все откатить.
Помогите советом или примером.
Спасибо.
Vitaly Grobshtein
Отправлен: 08.11.2006, 21:19
Вопрос задал: Vitaly (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: sir henry
Здравствуйте, Vitaly!
Желательно, как и в любой серверной СУБД, все операции отслеживающие целостность данных размещать на сервере в БД, в триггерах, а не в клиентском приложении.
Принцип работы с транзакциями в MSSQL точно такой-же, как и в FireBird.
Начало транзакции - BEGIN TRANSACTION
Подтверждение транзакции - COMMIT TRANSACTION
Отмена транзакции - ROLLBACK TRANSACTION
Допустим перед вставкой данных (триггер BEFORE INSERT) можно проверить, не противоречат ли вставляемые данные данным из другой, связанной таблицы.
IF (Условие_проверки)
{Если проверка успешна}
COMMIT TRANSACTION
ELSE
BEGIN
{Если не успешна, возбуждаем иключение с сообщением об ошибке}
RAISERROR('Такие данные вставлять нельзя!', 16)
ROLLBACK TRANSACTION
END
16, в сообщении об ошибке, это уровень опасности ошибки. За обычным пользователем, не администратором, закреплен диапазон от 11 до 16. Естественно чем больше номер, тем серьезнее ошибка.
Таким образом, если пользователь неправильно ввел данные в своем приложении, несоответствующие условию проверки, то он увидит сообщение сервера, то-то типа:
[Microsoft][ADO SQL Server driver][SQL Server]
Такие данные вставлять нельзя!
Ответ отправил: sir henry (статус: Академик) Россия, Красноярск ---- Ответ отправлен: 09.11.2006, 04:28