プログラミングではトランザクションがよく使われます。いわゆるトランザクションは、すべてが成功する必要がある一連の操作です。1 つの操作が失敗する限り、他のすべての手順も元に戻す必要があります。たとえば、ASP を使用してネットワーク ハードディスク システムを開発する場合、ユーザー登録部分では、
ユーザー情報をデータベースに記録する、ユーザーが初期化ユーザーの操作ログを保存するフォルダーを開く、
この 3 つの手順を実行する必要があります。トランザクション、それ以外の場合はディスク操作の場合 データベース操作を元に戻さずに失敗すると、ログインのみで操作ができない「デッドユーザー」現象が発生します。
データベース システムには特殊な開発の歴史があるため、Access から DB2 まですべてがトランザクション サポートを備えています。したがって、上記のステップは次のように表すことができます。
On Error Resume Next
Step 1:
トランザクション環境のデータベースにユーザー情報を記録
If Err then
接続を閉じて終了Else
ステップ 2: フォルダーを作成する If Err then
最初のデータベース操作をロールバックして終了します。 Else
ステップ 3: トランザクション環境でログ データベースを操作するIf Err then
最初のステップをロールバックし、2 番目のステップで作成したフォルダーを削除して、End If を終了します。
終了の場合
終了の場合
最初のデータベース操作のトランザクションを送信します。 2 番目のデータベース操作のトランザクションを送信します。
終了を
判定する必要があり、失敗した場合は前のステップに手動でロールバックする必要があり、プログラムが複雑でわかりにくくなります。今後プログラムが更新され、他のステップが追加された場合、If...Else...End If の階層をさらにネストする必要があり、プログラムの流れがより複雑になります。
正しい解決策は、ASP のトランザクション制御機能を使用することです。 MTS サービスに接続することで、IIS はトランザクションをサポートするさまざまなシステムを制御できます。プログラムが「失敗」シグナルを送信すると、トランザクションが正式に完了していない操作であっても、トランザクションをサポートするすべてのシステムが自動的にロールバックされます。サポート トランザクションもロールバックされます。便利な手動ロールバック方法を提供します。上記の例は、ASP トランザクション制御関数を使用して次のように書き換えられます:
<%@ TRANSACTION = Required %>
エラー時再開次の
設定 Conn=Server.CreateObject("ADODB.Connection")
接続してください...
接続「INSERT...」を実行します。
接続を閉じる
Set Conn=Nothing
Set Conn2=Server.CreateObject("ADODB.Connection")
接続2.開く....
Conn2.「INSERT....」を実行
接続2.閉じる
Set Conn2=Nothing
Set FSO=Server.CreateObject("Scripting.FilesystemObject")
FSO.CreateFolder "...."
If Err then
ObjectContext.SetAbort 'トランザクションをサポートするすべてのコンポーネントにロールバックを通知し、手動ロールバック コードを実行します
それ以外
ObjectContext.SetComplete
終了の場合
FSO=Nothing
Sub OnTransactionAbort
を設定します
応答。「エラー」と書き込みます
FSO.DeleteFile Server.Mappath("a.txt") 'FSO 手動ロールバック - フォルダーの削除
エンドサブ
SubOnTransactionCommit
Response.Write "タスクを正常に完了します"
エンドサブ
%>
最初の行の <%@ TRANSACTION = Required %> は、このページの ASP ファイルが MTS トランザクション サポートを必要とすることを示します。中間のすべての操作は、ロールバックの問題を考慮せずに通常の順序で記述されます。プログラムの最後にエラーがあるかどうかを確認します。その場合、ObjectContext の SetAbort メソッドを呼び出します。IIS は、MTS サービスを通じてトランザクションをサポートするすべてのコンポーネント (主にデータベース) にロールバックするように通知し、エラーが発生しない場合は、Sub OnTransactionAbort を実行してトランザクションをサポートしない操作を手動でロールバックします。 ObjectContext の SetComplete メソッドである Sub OnTransactionCommit が実行されて、成功メッセージが表示されます。
ASP プログラム全体では、エラー判定やロールバック処理などの冗長なコードを記述する必要がなく、将来的に多段階の処理が追加された場合でも、Sub OnTransactionAbort 内で制御するだけで済みます。これは非常に便利で、プログラマはエラー修正コードを書くのではなく、手続き的な記述に集中できます。
実際、ASP には他にも便利な機能がたくさん用意されており、私たちがそれらを使用するのを待っています。ASP はスクリプト言語を使用しているため、機能が弱いはずだと考えないでください。