В программировании часто используются транзакции. Так называемая транзакция представляет собой серию операций, все из которых должны быть успешными. Если одна операция завершается неудачно, все остальные шаги также должны быть отменены. Например, при использовании ASP для разработки сетевой системы жесткого диска часть регистрации пользователя должна сделать следующее:
записать информацию о пользователе в базу данных, открыть папку для пользователя для хранения журнала операций инициализации пользователя,
эти три шага должны использовать транзакций, в противном случае в случае операции с диском. Сбой без отмены операции с базой данных приведет к явлению «мертвого пользователя», который сможет только войти в систему, но не сможет работать.
Из-за особой истории развития систем баз данных все, от Access до DB2, имеет поддержку транзакций. Таким образом, описанные выше шаги можно выразить следующим образом:
При ошибке Возобновить Следующий
шаг 1.
Записать информацию о пользователе в базу данных в среде транзакций.
Если ошибка, то
Закройте соединение и выйдитеЕще
Шаг 2. Создайте папку «Если ошибка, то»
Откатите первую операцию с базой данных и выйдите из Else.
Шаг 3. Работа с базой данных журналов в среде транзакций. Если ошибка, то
Откатите первый шаг, удалите папку, созданную на втором шаге, и выйдите из End If
Конец, если
Конец, если
Отправьте транзакцию первой операции с базой данных. Отправьте транзакцию второй операции с базой данных.
Конец
нужно оценивать на каждом шагу. Если не получается, нужно вручную откатывать предыдущие шаги, что делает программу сложной и трудной для понимания. Если в будущем программа будет обновлена и будут добавлены другие шаги, потребуется вложение большего количества слоев If...Else...End If, что усложнит ход программы.
Правильное решение — использовать функцию управления транзакциями ASP. Обратившись к службе МТС, IIS может управлять множеством систем, поддерживающих транзакции. Когда программа отправляет сигнал «сбой», все системы, поддерживающие транзакции, автоматически откатывают операции, даже если операция официально не завершена; транзакции поддержки также будут отменены. Предоставляет удобный метод ручного отката. Приведенный выше пример переписан с использованием функции управления транзакциями ASP следующим образом:
<%@ TRANSACTION = Required %>
При ошибке возобновить следующий
набор Conn=Server.CreateObject("ADODB.Connection")
Конн.Открыть....
Подключите.Выполните «ВСТАВИТЬ...».
Конн.Закрыть
Set Conn=Ничего
Set Conn2=Server.CreateObject("ADODB.Connection")
Conn2.Открыть....
Conn2.Выполните «ВСТАВИТЬ…».
Conn2.Закрыть
Set Conn2=Ничего
Set FSO=Server.CreateObject("Scripting.FilesystemObject")
FSO.CreateFolder "...."
Если Ошибка Тогда
ObjectContext.SetAbort 'Уведомляет все компоненты, поддерживающие транзакции, об откате и запуске кода отката вручную.
Еще
ObjectContext.SetComplete
Конец, если
Установить FSO=Nothing
Sub OnTransactionAbort
Ответ. Напишите «Ошибка».
FSO.DeleteFile Server.Mappath("a.txt") 'Откат FSO вручную - удалить папку
Конец субтитра
Субонтранзакционкоммит
Ответ.Напишите «Завершить задачу успешно»
Конец субтитра
%>
<%@ TRANSACTION = Required %> в первой строке указывает, что файл ASP на этой странице требует поддержки транзакций MTS. Все операции в середине записываются в обычном порядке без учета проблем отката. Определите, есть ли ошибки в конце программы. Если это так, вызовите метод SetAbort ObjectContext. IIS уведомит все компоненты, поддерживающие транзакции, через службу MTS о необходимости отката (в основном базы данных), и запустит Sub OnTransactionAbort, чтобы вручную откатить операции, которые не поддерживают транзакции, и если ошибок не возникает, вызовите его. метода SetComplete ObjectContext, Sub OnTransactionCommit будет запущен для отображения сообщения об успехе.
Вся программа ASP не требует написания избыточного кода для операций определения ошибок и отката. Ее необходимо оценивать только в конце. Даже если в будущем будут добавлены многоэтапные операции, их нужно будет контролировать только в Sub OnTransactionAbort. Это очень удобно, и программисты могут сосредоточиться на процедурном написании, а не на написании кода, исправляющего ошибки.
На самом деле ASP также предоставляет множество других полезных функций, ожидающих нашего использования. Не думайте, что, поскольку ASP использует язык сценариев, его функции должны быть слабыми.