SAK 図書館

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

ASP VB Script oo4o + SQL 応用編1 oo4o 接続 - OpenDatabase

Active Server Pages(ASP) - VB Script で、oo4o による Oracle アクセスに
ついて説明します。
oo4o は、Oracle RDBMS でみ使用可能です。

■Oracle oo4o

  機能として、
    Oracle 接続          (connect)
    レコードセット処理   (select)
    トランザクション処理 (commit、rollback)
    アクションクエリ実行 (insert、update、delete)
  を使います。

  尚、oo4o の .close メソッド系は内部的になにもしていないので、
  Set オブジォクト = Nothing で処理します。

■oo4o 接続(Oracle 接続、オラクル接続)

  Public Const ORADB_DEFAULT   = &H0
  dim dbname
  dim cnuser

'** oo4o 接続
  dbname = ""
           '|_ Oracle サービス名(別名)"
  cnuser = "SAK/SAK"
           '|   |_ パスワード
           '|_ ユーザ名
  if isempty(session("OraSession")) then
    Set session("OraSession") = Server.CreateObject("OracleInProcServer.XOraSession")
  end
  if isempty(session("OraDatabase")) then
    Set session("OraDatabase") = session("OraSession").OpenDatabase(dbname, cnuser, ORADB_DEFAULT)
  end

'** RDB 処理
  'ここに操作コードが入る

■補足

  ・oo4o 接続は、session 変数で行う。
    アクセスの度に接続していてはレスポンスが悪い。

  ・session("OraSession") については、application("OraSession") の方が
    更に効率は良い。(global.asa に記述すると言う方法もある。)
    application("OraSession") の場合、Oracle サービスがダウンしたときに
    ASP 全体も再起動しないといけない。
    session("OraSession") では、ブラウザを上げ直すだけで良い。
    application 変数を使用する場合は、session("OraSession") を
    application("OraSession") と読み替えて下さい。

■接続プール

  ・OraSession.CreateDatabasePool のようにコネクションプールを使用して
    接続することもできる。

■session("OraSession") メソッド

  session("OraSession").OpenDatabase              (データベース接続)
  session("OraSession").BeginTrans                (トランザクション開始)
  session("OraSession").CommitTrans               (トランザクションコミット)
  session("OraSession").Rollback                  (トランザクションロールバック)
  session("OraSession").ResetTrans                (トランザクション無条件ロールバック)
  session("OraSession").LastServerErrReset        (ラストエラーリセット)
  Set session("OraSession") = Nothing             (セッションクローズ)

■session("OraSession") プロパティ

  session("OraSession").OIPVersionNumber          (Oracle バージョン)
  session("OraSession").LastServerErr             (ラストエラーコード)
  session("OraSession").LastServerErrText         (ラストエラーメッセージ)

■session("OraDatabase") メソッド

  session("OraDatabase").ExecuteSQL               (SQL 実行)
  session("OraDatabase").CreateSQL                (OraSqlStmt の作成)
  session("OraDatabase").CreateDynaset            (ダイナセット作成)
  session("OraDatabase").CreateCustomDynaset      (カスタムダイナセット作成)
  session("OraDatabase").CreatePlsqlDynaset       (PL/SQL ダイナセット作成)
  session("OraDatabase").CreatePlsqlCustomDynaset (カスタム PL/SQL ダイナセット作成)
  session("OraDatabase").LastServerErrReset       (ラストエラーリセット)
  Set session("OraDatabase") = Nothing            (コネクトクローズ)

■session("OraDatabase") プロパティ

  session("OraDatabase").Connect                  (コネクトユーザ名)
  session("OraDatabase").DatabaseName             (サービス名)
  session("OraDatabase").RDBMSVersion             (Oracle バージョン)
  session("OraDatabase").LastServerErr            (ラストエラーコード)
  session("OraDatabase").LastServerErrPos         (ラストエラーホジション)
  session("OraDatabase").LastServerErrText        (ラストエラーメッセージ)
  session("OraDatabase").Options                  (オプションフラグ値)

■OpenDatabase 定数

  Public Const ORADB_DEFAULT   = &H0
  Public Const ORADB_ORAMODE   = &H1
  Public Const ORADB_NOWAIT    = &H2
  Public Const ORADB_DBDEFAULT = &H4
  Public Const ORADB_DEFERRED  = &H8

■古い書き方?

  DbOpenDatabase、DbExecuteSQL、DbCreateSQL、DbCreateDynaset、
  DbBeginTrans、DbCommitTrans、DbRollback 等の Db はなくても良い。

■現実的なコード例

<%@ Language=VBScript %>
<%
'=======================================================================
'  準備
'=======================================================================
  Public Const ORADB_DEFAULT   = &H0
  dim dbname
  dim cnuser

'** エラートラップ開始
  on error resume next

'** サービス、ユーザ設定
  dbname = ""
  cnuser = "SAK/SAK"
  '// Oracle サービス名(別名)、ユーザ・パスワード指定

'** oo4o 接続
  if isempty(session("OraSession")) then
    Set session("OraSession") = Server.CreateObject("OracleInProcServer.XOraSession")
    if err <> 0 then
      response.write("<P>データベースに接続出来ません。<BR>" _
        & "CreateObject - Oracle oo4o エラー</P>")
    end if
  end if
  if isempty(session("OraDatabase")) then
    Set session("OraDatabase") = session("OraSession").OpenDatabase(dbname, cnuser, ORADB_DEFAULT)
    if err <> 0 then
      response.write("<P>データベースに接続出来ません。<BR>" _
        & err & ": " & error & "</P>")
    end if
  end if

'** エラートラップ終了
  on error goto 0

'=======================================================================
'  処理
'=======================================================================
  response.write("<P>-- 終了 --</P>")
%>

■更に現実的なコードアドバイス

  ・サービス名、ユーザ名をコード中に定義するより、初期化ファイルなどを
    使用してプログラムと独立させる方が可搬性に富んでいる。
    この場合、パスワードなどがもろ見えになってしまっては困る。
    暗号化関数を作成して、隠蔽処理など必ず実施する。

■ASP VB Script oo4o + SQL 応用編資料
■ASP VB Script ADO + SQL 応用編資料
■ASP VB Script 基礎実地編資料
■ASP VB Script 基礎編資料
■SQL 基礎編資料
■SQL 基礎実地編資料
■SQL チューニング編資料
■Oracle PL/SQL 編資料
■PostgreSQL 編、JAVA Servlet、JSP 編資料
■MySQL 編資料
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索



Copyright (C) 1999-2017 Y.SAK