ページの先頭行へ戻る
Symfoware Server V10.0.0 アプリケーション開発ガイド(ODBCドライバ編)

D.4.8 トランザクション制御

ADOとの連携でトランザクション制御を行うサンプルコードについて説明します。

トランザクション制御は、明示的に行うことができます。

Connection.BeginTransメソッド、Connection.CommitTransメソッドまたはConnection.RollbackTransメソッドで明示的に行うことができます。これらのメソッドでトランザクションを制御していない場合は、トランザクションはSQL文を実行することで開始され、そのSQL文の処理完了後すぐにコミットされて終了します。

アクセスモードの設定または変更は、SET TRANSACTION文またはConnection.Modeプロパティで行います。Connection.Modeプロパティはコネクションが切れている時だけ設定または変更することができます。コネクション接続中に変更が可能なSET TRANSACTION文による設定または変更を推奨します。

独立性水準の設定または変更は、Connection.IsolationLevelプロパティまたはSET TRANSACTION文で行います。SET TRANSACTION文で設定または変更を行う場合は、Connection.BeginTransメソッド実行時にConnection.IsolationLevelプロパティ設定値に変更されるため、Connection.BeginTransメソッド実行後に行う必要があります。このため、Connection.IsolationLevelプロパティによる設定または変更を推奨します。

本サンプルコードは、アクセスモードをREAD WRITE、独立性水準をREAD COMMITTEDに設定します。

アプリケーションの手順

  1. コネクションを接続します。詳細は、“D.4.1 接続および切断”を参照してください。

  2. Connection.ExecuteメソッドでSET TRANSACTION文を実行しアクセスモードを設定します。

  3. Connection.IsolationLevelプロパティ独立性水準(adXactReadCommitted)を設定します。

  4. Connection.BeginTransメソッドでトランザクションを開始します。

  5. データ操作が正常終了した場合、Connection.CommitTransメソッドを実行します。
    データ操作が異常終了した場合、Connection.RollbackTransメソッドを実行します。

  6. コネクションを切断します。

  7. オブジェクトを破棄します。

エラー処理については、“D.4.10 エラー処理”を参照してください。

<%@ language="vbscript" %>
<!-- #include file = "adovbs.inc" -->
<html>
<head>
<title>トランザクション制御</title>
</head>
<body bgcolor="White">
<b>トランザクション制御</b>

<hr>

<%
'宣言
Dim OBJdbConnection

'エラーを取得するためエラー発生時に処理を止めないようにする
On Error Resume Next

'Connectionオブジェクトの生成と設定
Set OBJdbConnection = Server.CreateObject("ADODB.Connection")
OBJdbConnection.ConnectionString = "DSN=DSN01;UID=USER01;PWD=PASS01"

'1. コネクション接続
OBJdbConnection.Open

'2. アクセスモードの設定
OBJdbConnection.Execute "SET TRANSACTION READ WRITE", , adCmdText

'3. IsolationLevelの設定
OBJdbConnection.IsolationLevel = adXactReadCommitted

'4. トランザクション開始
OBJdbConnection.BeginTrans

'データ操作を行う処理を記述

If OBJdbConnection.Error.Count = 0 Then
    '5. コミット(正常終了時)
    OBJdbConnection.CommitTrans()
Else
    '5. ロールバック(異常終了時)
    OBJdbConnection.RollbackTrans()
End If

'6. コネクション切断
OBJdbConnection.Close

'7. オブジェクトの破棄
Set OBJdbConnection = Nothing

%>

<hr>
</body>
</html>