SAK 図書館
ASP VB Script ADO + SQL 応用編 (その一) ADO 接続 - Open
Active Server Pages(ASP) - VB Script で、ADO による SQL-RDB アクセスに
ついて説明します。
基本的に Oracle、SQL-Sever、MDB で共通です。
■ADO
ODBC 接続により、SQL-RDB にアクセスします。
機能として、
ODBC 接続 (ログイン)
レコードセット処理 (select)
トランザクション処理 (commit、rollback)
アクションクエリ実行 (insert、update、delete)
ODBC 接続解除 (ログアウト)
を使います。
■ODBC システム DSN 定義
■ODBC 接続(Oracle 接続、オラクル接続、SQL-Server 接続、mdb 接続)
'** ODBC 接続
if isempty(session("s3cn_ado")) then
set session("s3cn_ado") = server.CreateObject ("ADODB.Connection")
session("s3cn_ado").Open "dsn=SAK3_ADO;uid=SAK;pwd=SAK"
session("s3cn_ado").CursorLocation = 3
'|_ adUseServer = 2
' adUseClient = 3
end if
'** RDB 処理
'ここに操作コードが入る
'** ODBC 接続解除
'session("s3cn_ado").Close ← セッションで接続を維持するので解除しない
データベースに Oracle を使用する場合、Oracle 固有の ODBC ドライバと
Microsoft が提供する Oracle 用の ODBC ドライバとを使用する機能により使い
分ける必要があります。(RDO 接続での説明を参照下さい。)
MDB を ODBC を経由せず、直接アクセスするには、
dsn = "Provider=Microsoft.Jet.OLEDB.3.51;Persist Security Info=False;Data Source=G:\TMP\sak3.mdb"
のように指定します。(open dsn, user, pass, option)
■補足
・ASP のページ単位に ODBC 接続していてはレスポンスが悪い。
ここでは、ユーザセッション中は、接続を維持したままにしている。
従って、session("s3cn_ado").Close を実行してはならない。
・isempty() で、session("s3cn_ado") が存在しないとき、1 度だけ ODBC
接続するようになっている。
・session("s3cn_ado").CursorLocation は、レコードセットの順処理だけを
使用するなら、adUseServer = 2 を指定する方が高速である。
レコードの前方移動などを行う場合は、adUseClient = 3 しか選択できない。
・session("s3cn_ado").Open "dsn=SAK3_ADO;uid=SAK;pwd=SAK",,, 16
'|_ 非同期 adAsyncConnect
非同期接続(非同期アクセス) では、コマンドの完了を待たずに制御が戻る。
処理の完了は、session("s3cn_ado").state によって判断する。
レコードセット取得に時間がかかるとき、rs.state で完了までに先に処理
するコードを実行できる。または、処理時間がかかれば、rs.cancel で取り
消せる。command 等の実行(非同期実行) も同じである。(cmd.state)
obj.state
0 adStateClosed 閉じている
1 adStateOpen オープン
2 adStateConnecting 接続中
4 adStateExecuting 実行中
8 adStateFetching 行を取得
■現実的なコード例
<%@ Language=VBScript %>
<%
'=======================================================================
' SQL-RDB 処理
'=======================================================================
dim dsn
'** DSN 設定
dsn = "dsn=SAK3_ADO;uid=SAK;pwd=SAK"
'// ODBC システム DSN を使用しての接続例である。
'** ODBC 接続
if isempty(session("s3cn_ado")) then
set session("s3cn_ado") = server.CreateObject ("ADODB.Connection")
session("s3cn_ado").Open dsn
session("s3cn_ado").CursorLocation = 3
end if
'** RDB 処理
'ここに処理コード
%>
■更に現実的なコードアドバイス
・dsn をコード中に定義するより、初期化ファイルなどを使用してプログラム
と独立させる方が可搬性に富んでいる。
この場合、パスワードなどがもろ見えになってしまっては困る。
暗号化関数を作成して、隠蔽処理など必ず実施する。
SAK3 では、データベースのユーザ ID とパスワードを暗号化して初期化フ
ァイルに定義している。従って、どのようなシステム環境、実行環境にも
ASP を無修正で移行できる。
■エラーコレクション参照
session("s3cn_ado").errors.clear '** エラーをクリア
session("s3cn_ado").errors.count '** エラーの数
dim e as variant
for each e in session("s3cn_ado").errors
msgbox e.description '** エラー内容
next
■ASP VB Script ADO + SQL 応用編資料
■ASP VB Script oo4o + SQL 応用編資料
■ASP VB Script 基礎実地編資料
■ASP VB Script 基礎編資料
■SQL 基礎編資料
■SQL 基礎実地編資料
■SQL チューニング編資料
■Oracle PL/SQL 編資料
■PostgreSQL 編、JAVA Servlet、JSP 編資料
■MySQL 編資料