以下より転載させていただきました。ありがたい
バッチで,ODBC接続の設定を追加・更新・表示しよう(odbcconf.exeの使い方:PostgreSQLでの使用例)
コマンドプロンプト DB PostgreSQL WSH/JScript
コマンドプロンプトのバッチから,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を削除できることになっている。
ただ,手元の環境では動作しなかった。