コマンドプロンプトのバッチから,ODBC設定

以下より転載させていただきました。ありがたい

 

バッチで,ODBC接続の設定を追加・更新・表示しよう(odbcconf.exeの使い方:PostgreSQLでの使用例)

コマンドプロンプト DB PostgreSQL WSH/JScript

バッチのまとめTOP

 

コマンドプロンプトのバッチから,ODBC設定を

  • 新規作成
  • 更新
  • 一覧表示

する方法。

接続先のDBMSの例としては,PostgreSQLの場合を取り上げる。

 

GUIだと,DSNを追加するためには

  • コントロールパネル→管理ツール→データソース(ODBC)

のダイアログを操作する必要があり,面倒。

これをCUIで自動化すれば,一括設定もできて便利。

 

また,応用として,

  • DB接続の前に,接続に必要なDSNも自動で作ってしまう

というサンプルコード(JScript)を掲載。

システムDSNの追加・更新

  • データソース名:hoge_dsn
  • データベース名:hoge_db
  • 接続先サーバ:168.0.hoge
  • 接続先サーバのポート番号:5432
  • DB認証情報:hoge_user/hoge_pass

の場合,DOS窓上で

odbcconf /A {CONFIGSYSDSN “PostgreSQL Unicode” “DSN=hoge_dsn|DATABASE=hoge_db|SERVER=192.168.0.hoge|PORT=5432|UID=hoge_user|PWD=hoge_pass”}

とする。

  • /A は,アクションを実行するという意味。
  • CONFIGSYSDSN は,システムDSNの設定情報を操作するという意味。新規DS/既存DSの別を問わない。
  • その次に,ODBCドライバ名を指定。
  • その次に,データソースの属性情報を「|」区切りで指定。

DSN=〜に現在存在しないデータソース名を指定すると,DSN設定情報の新規作成になる。

DSN=〜に既存のデータソース名を指定すると,DSN設定情報の上書きになる。

 

DBのバージョンなどをもう少し詳しく指定することもできる。

odbcconf /A {CONFIGSYSDSN “PostgreSQL Unicode” “DSN=hoge_dsn|DATABASE=hoge_db|SERVER=192.168.0.hoge|PORT=5432|UID=hoge_user|PWD=hoge_pass|SSLmode=disable|ReadOnly=0|Protocol=8.2;”}

実行結果をログに出力することもできる。

odbcconf /Ld hoge_log.txt /A {CONFIGSYSDSN “PostgreSQL Unicode” “DSN=hoge_dsn|DATABASE=hoge_db|SERVER=192.168.0.hoge|PORT=5432|UID=hoge_user|PWD=hoge_pass”}

 

odbcconfの使い方の説明はヘルプダイアログに少し載っている。

odbcconf /?

ODBCデータソース – システムDSN にドライバSQL Serverをバッチ(スクリプト)で登録する
http://slashdot.jp/~patagon/journal/399075

スポンサーリンク

 

ODBCデータソースの一覧表示・確認方法

ODBC関連のレジストリの登録値を見ればよい。

そのためのコマンド:

reg query “HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources”

ODBCのシステムDSN の一覧を抽出することはできませんか?
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1415038544

WindowsのODBCの設定内容は下記レジストリにあるので,それをエクスポートすればよい

  • HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI
  • HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources

コマンドラインからプロセスを起動・終了する方法 (環境変数とレジストリについて)
http://d.hatena.ne.jp/language_and_engineering/20081028/1225160338

  • レジストリの内容は reg query で読める

あるいは,設定ファイルを閲覧する。

type C:\windows\odbc.ini

プログラムからODBCデータソースの一覧を取得したい
http://oshiete.goo.ne.jp/qa/2481134.html

システムDSNはWINDOWSフォルダのODBC.INIを見ればよい

応用:WSHバッチに組みこむ

「DSN作成」が自動化できるので,「プログラム中でのDB接続の前提条件」を1つ減らすことができる。

下記のWSHのサンプルコードのように,

  • 専用のDSNを作成してから
  • そのDSNを利用してDB接続

という流れのコードが可能。

 

show_table.js

 

// ———- ODBCのシステムDSNを作成する ———-

 

 

// 設定情報

var dsn         = “hoge_dsn”;

var db_name     = “hoge_db”;

var server_name = “192.168.0.hoge”;

var db_username = “hoge_user”;

var db_password = “hoge_pass”;

 

// odbcconfのコマンド文字列

var odbcconf_command = ‘odbcconf /A {CONFIGSYSDSN “PostgreSQL Unicode” “DSN=’

+ dsn

+ ‘|DATABASE=’

+ db_name

+ ‘|SERVER=’

+ server_name

+ ‘|PORT=5432|UID=’

+ db_username

+ ‘|PWD=’

+ db_password

‘”}’

;

 

// odbcconfを呼び出してDSN作成実行(同名のDSNが既にある場合は上書き)

var ws = WScript.CreateObject(“WScript.Shell”);

ws.Exec( odbcconf_command );

WScript.Sleep( 1000 );

 

 

// ———- DBに接続する ———-

 

 

// 上記で作成したDSNを利用して接続

var connection_string = “ODBC”

+ “;Driver={PostgreSQL Unicode}”

+ “;DSN=” + dsn

+ “;DATABASE=” + db_name

+ “;UID=” + db_username

+ “;PWD=” + db_password

+ “;”

;

var con = WScript.CreateObject(“ADODB.Connection”);

con.Open( connection_string );

 

// SQL実行

var record_set = con.Exucute( “SELECT * FROM hoge_table;” );

 

// 取得したレコードを全行読み出し

while( ! record_set.EOF )

{

// 特定のカラムの値を表示

var column_value = record_set( “hoge_column” ).Value;

WScript.Echo( column_value );

 

// 次の行へ

record_set.MoveNext();

}

 

// 後処理

con.Close();

 

PostgreSQLのバッチを,パスワードを聞かれずに実行する方法 (psqlも設定ファイル編集も不要)
http://d.hatena.ne.jp/language_and_engineering/20090513/p1

 

ADO で SELECT 文の結果を取得する
http://jeanne.wankuma.com/tips/vb6/sqlserver/executereader.html

 

実行環境付きのSQL例文集 (ExcelのドキュメントからDBにアクセス)
http://d.hatena.ne.jp/language_and_engineering/20090127/1233067389

補足:DSNの自動削除について

データソースの削除は,一応,下記にソースコードが載っている。

ODBCの自動登録について
http://questionbox.jp.msn.com/qa108207.html

ODBCCP32.DLL の SQLConfigDataSource 関数を呼び出し,引数に ODBC_REMOVE_DSN を渡せば,DSNを削除できることになっている。

ただ,手元の環境では動作しなかった。