|
oo4o のバージョンアップにより、旧コンテンツの内容とは、かなり違っていますのでご注意ください。 ASP で、ORACLE との連携を行うときに、注意すべき点を挙げておきます。 # いまさらASPでもないですが(^_^;) Oracle 10.2G/oo4o v5.0/IIS 6.0 を前提にしています。 Global.asa †コネクションプーリングの機能をつかいましょう。 <OBJECT RUNAT=Server SCOPE=Application ID=OraSession PROGID="OracleInProcServer.XOraSession"></OBJECT>
<!--METADATA TYPE="TypeLib" FILE="oip10.tlb" -->
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
Option Explicit
Sub Application_OnStart()
OraSession.CreateDatabasePool 1, 20, 200, "ORCL", "SCOTT/TIGER", 0
End Sub
Sub Application_OnEnd()
OraSession.DestroyDatabasePool
End Sub
</SCRIPT>
古い ORACLE クライアントでは ■ マルチスレッド・プログラムにおいてアクセス違反が発生する このような不具合があり、プーリング機能を使うのが定石となっていました。 ■ Oracle 9i でのマルチスレッド・アプリケーションの対応について という情報も出ており、引き続きプーリング機能を使うことが推奨されています。 Common.asp †汎用的な処理を、まとめておいて、各コンテンツの先頭で INCLUDE しておくと、メンテナンスが容易です。 Common.asp <% @LANGUAGE="VBScript" %>
<% Option Explicit %>
<%
'===============================================================================
' 共通初期処理
'===============================================================================
' Oracle
Public gDB ' OraDatabase
Set gDB = New COraDatabase
各コンテンツの記述 <!--#include file="./include/Common.asp"-->
<HTML>
<HEAD>
<%
'===============================================================================
' コンテンツスクリプト処理
'===============================================================================
Dim objRec
Set objRec = gDB.CreateDynaset("SELECT * FROM EMP", 0)
・
・
%>
トランザクション処理 †OraDatabase オブジェクトの Connection プロパティに対し、BeginTrans などのトランザクション処理メソッドを実行してください。 OraDatabase オブジェクトをラップしたクラスを使おう †スクリプトが異常終了して、Parameter が削除されないまま残ってしまうと正常にプールに戻されないようです。 Class COraDatabase
Dim mConnection
Dim mDatabase
Private Sub Class_Initialize()
Set mDatabase = OraSession.GetDatabaseFromPool(1000)
Set mConnection = mDatabase.Connection
End Sub
Private Sub Class_Terminate()
With mDatabase.Parameters
Do While .Count > 0
.Remove 0
Loop
End With
mConnection.ResetTrans
Set mConnection = Nothing
Set mDatabase = Nothing
End Sub
Public Property Get CreateDynaset(sqlStmt, options)
Set CreateDynaset = mDatabase.CreateDynaset(sqlStmt, options)
End Property
Public Sub BeginTrans()
mConnection.BeginTrans
End Sub
Public Sub CommitTrans()
mConnection.CommitTrans
End Sub
Public Sub Rollback()
mConnection.Rollback
End Sub
Public Function ExecuteSQL(sqlStmt)
ExecuteSQL = mDatabase.ExecuteSQL(sqlStmt)
End Function
Public Property Get Parameters
Set Parameters = mDatabase.Parameters
End Property
End Class
Value プロパティをかならずつけよう †ダイナセットを作成して、フィールドの値を参照する場合、かならず規定プロパティの Value をつけてください。 つけないで、フィールドの値を参照すると、固定長キャラクタのフィールドに、スペースがセットされていた場合、ASP-0115 が発生します。 Dim objRec
Dim objFields
Set objRec = gRefDB.CreateDynaset(strSQL, 0)
Set objFields = objRec.Fields
Response.Write objFields("HOGE").Value
Session 変数にオブジェクトを格納しない †Session 変数に OraDatabase, OraDynaset などのオブジェクトを格納しないでください。 セッションレスを検討する †できればIISの構成をセッションレスにしてください。 それが Cookie に非対応なツールであった場合、セションが増え続けてしまいます。 CreateDynaset は ORADYN_NOCACHE で †ORADYN_NOCACHE オプションで OraDynaset を開くと、テンポラリフォルダに OIP-xxxx というワークファイルを作成しなくなります。 |
||