【実務・中級編】【DB連携】ADODB (ActiveX Data Objects) を用いた SQL Server 接続とトランザクション制御の実装 – VBScript (Visual Basic Scripting Edition)解析バイブル

スポンサーリンク

VBScriptでデータベースを制する:ADODBトランザクション制御の極意

業務自動化の現場でVBScriptを選択する際、多くのエンジニアが陥る罠がある。それは「動けばいい」という甘えによる、例外処理の欠如とコネクション管理の杜撰さだ。

特にSQL Serverとの連携において、`ADODB`は枯れた技術ではあるが、その分、設計者の「作法」が如実に表れる。本稿では、プロフェッショナルとして現場で生き残るための、堅牢なデータベース連携モジュールを伝授する。

—

1. なぜ「雑な接続」が現場を破壊するのか

多くのスクリプトが、`CreateObject(“ADODB.Connection”)`を呼び出し、処理が終わるまで開きっぱなしにしている。これはメモリリークの温床であり、ネットワーク障害時のゾンビセッションを誘発する。

プロが守るべき3つの鉄則:

  • 遅延接続・即時解放: 接続は必要最小限のスコープで行い、処理が終われば即座に`Close`する。
  • 明示的なトランザクション: 更新系処理(INSERT/UPDATE/DELETE)は、必ず`BeginTrans`で囲い、成功時のみ`Commit`する。
  • 定数によるハードコードの排除: 接続文字列をコードに埋め込むのは罪だ。環境変数や設定ファイルから読み込む設計にせよ。

—

2. 実務プロダクションコード:堅牢なデータ更新モジュール

以下のコードは、エラー発生時に確実にロールバックを行い、リソースを解放するテンプレートだ。これをベースに、貴殿の業務ロジックを組み込むこと。

Option Explicit

‘ 接続文字列(実務では設定ファイルや環境変数から取得すること)
Const CONN_STR = “Provider=SQLOLEDB;Data Source=SERVER_NAME;Initial Catalog=DB_NAME;Integrated Security=SSPI;”

Sub ExecuteSecureTransaction()
Dim conn, cmd

‘ オブジェクトの初期化
Set conn = CreateObject(“ADODB.Connection”)

On Error Resume Next ‘ エラーハンドリング開始

‘ 1. 接続の確立
conn.Open CONN_STR
If Err.Number <> 0 Then
WScript.Echo “接続エラー: ” & Err.Description
Exit Sub
End If

‘ 2. トランザクション開始
conn.BeginTrans

‘ 3. 処理実行(例:データの更新)
conn.Execute “UPDATE T_Sales SET Status = 1 WHERE Processed = 0”, , 1 ‘ 1 = adCmdText

If Err.Number <> 0 Then
‘ エラー発生時はロールバック
WScript.Echo “更新エラー発生、ロールバック中…: ” & Err.Description
conn.RollbackTrans
Else
‘ 成功時はコミット
conn.CommitTrans
WScript.Echo “トランザクション完了。”
End If

‘ 4. 後始末(重要:FinallyブロックがないVBScriptではここが生命線)
On Error GoTo 0
conn.Close
Set conn = Nothing
End Sub

‘ 実行
ExecuteSecureTransaction

—

3. 現場で「差」がつく設計の要点

レコードセットのパース(読み取り)時の注意

`Recordset`を扱う際は、`CursorLocation`の設定を意識せよ。デフォルトのサーバーサイドカーソルはネットワーク負荷が高い。大量データを扱う場合は、`rs.CursorLocation = 3` (adUseClient) を設定し、クライアント側でキャッシュさせることでパフォーマンスを劇的に向上できる。

なぜ `On Error Resume Next` を使うのか

VBScriptにはJavaやC#のような洗練された`try-catch-finally`構造が存在しない。そのため、あえて`On Error Resume Next`を使い、`Err.Number`を監視する手法が、唯一の「現場レベルの例外制御」となる。この記述を疎かにするスクリプトは、単なる「動くゴミ」であると自覚せよ。

コネクションプーリングの恩恵

`ADODB`はOSレベルでコネクションプーリングを行っている。接続文字列を完全に一致させれば、スクリプトが終了するたびに物理接続を切断するのではなく、プールから再利用される。これにより、連続してツールを回すようなバッチ処理でも、SQL Server側の負荷を最小限に抑えられる。

—

最後に:エンジニアとしての矜持

VBScriptは「古い言語」ではない。OSのインフラ層に深く食い込んだ「強力な自動化言語」だ。

今回提示したトランザクション制御のパターンは、小規模なツールであっても、大規模なシステムであっても変わらない「信頼の基礎」である。コードを書く際、常に「もしこの行でネットワークが切れたら?」「もしこのデータがNULLだったら?」という最悪のケースを想像すること。

その想像力こそが、君を単なるコーダーから、真の自動化エンジニアへと引き上げる鍵となる。健闘を祈る。

タイトルとURLをコピーしました