2009年8月15日土曜日

コマンドラインから、Windowsのデータソースを登録する方法

Windowsのユーザ データソースに、コマンドラインから登録するには、odbcconf コマンドが使える。
ただし このコマンドでは、データソースを削除できない。

odbcconf CONFIGDSN "Microsoft Access Driver (*.mdb)" "DSN=テストDS名;Description=DS説明;DBQ=C:\work\testdb.mdb"

odbccp32.cpl コマンドで、ODBC データソース アドミニストレータを開いて実行結果を確認できる。
コマンドではデータソースを削除できないが、ODBCCP32.dllを使えば削除できる。
なんとか自動で削除するには、Windows APIを使ってdllを呼ぶ方法になる。


#include <windows.h>
#define ODBC_ADD_DSN 1 // Add user data source
#define ODBC_CONFIG_DSN 2 // Configure (edit) user data source
#define ODBC_REMOVE_DSN 3 // Remove user data source
#define ODBC_ADD_SYS_DSN 4 // Add system data source
#define ODBC_CONFIG_SYS_DSN 5 // Configure (edit) system data source
#define ODBC_REMOVE_SYS_DSN 6 // Remove system data source

typedef long (*_SQLConfigDataSource)(long, long, char*, char*);

int main(int argc, char* argv[]) {

char driver[] = "Microsoft Access Driver (*.MDB)";
char options[] = "DSN=テストDS名";

HINSTANCE odbcdll = LoadLibrary("ODBCCP32.dll");
FARPROC proc = GetProcAddress(odbcdll, "SQLConfigDataSource");
long result = ((_SQLConfigDataSource)proc) (NULL, ODBC_REMOVE_DSN, driver, options);
FreeLibrary(odbcdll);
return 0;
}