Windows環境にてC言語やC++でODBCを使うには4 SQLDriverConnect

Windows環境にてC言語やC++でODBCを使うには3
http://sato-si.at.webry.info/200601/article_5.html
の続きです。

ODBCの接続を行うのには,SQLDriverConnect か SQLConnect を使う。

違い:
SQLDriverConnect は,ODBC接続コマンドを文字列で指定でき,他にも細かいオプションを指定できる。

SQLConnect は,接続先データベースサーバ名,データベース接続用のIDとパスワードの指定する3つの引数しか使えないことだ。

参考文献:
http://msdn2.microsoft.com/ja-jp/library/ms131326.aspx
http://msdn2.microsoft.com/ja-jp/library/ms131421.aspx

ほとんどの場合は,SQLDriverConnectを使うほうが良いでしょう。
で,接続の方法は,以下のプログラムだと,DNSを見に行く設定にしてみた。
これは,システムDNSかユーザDNSに登録されているものの設定をそのまま使う。

HENV henv; // ODBC環境のハンドル
HDBC hdbc; // ODBC接続中のハンドルHWND hWnd = NULL; // 親ウインドウ。これを指定すると,ダイヤログが出せる。
TCHAR *ucConnectStr = "DSN=MyDSNSetting"; // ここの指定が接続の全て!

// これは,ドライバ接続に実際に使った文字列。入力のucConnectStrにいくつか値を追加した形で生成される。特に後で使わなくても良いが省略できないらしい(不明)
TCHAR ucOutConnectStr[1024]; // 最低でも1024バイト必要です
SQLSMALLINT pcbConOut = 0;

RETCODE rc; // 戻り値

SQLAllocEnv(&henv); // ODBC環境のためのメモリ(作業領域)確保
SQLAllocConnect(henv, &hdbc); // ODBC接続中状態のメモリ(作業領域)確保

rc = SQLDriverConnect(hdbc, hWnd, (SQLTCHAR*)ucConnectStr, lstrlen(ucConnectStr), (SQLTCHAR*)ucOutConnectStr, sizeof(ucOutConnectStr), &pcbConOut, SQL_DRIVER_NOPROMPT ); // パラメータを文字列で指定してODBCドライバに接続する



ucConnectStr の複数値を同時に設定するには,;で区切る
例:
TCHAR *ucConnectStr = "DSN=MyDNSSetting;UID=MyUserName;PWD=password";

として,つなげば,DSNに,MyDNSSettingという名前で登録してあり,それを使う。
また,接続IDは, MyUserName で,パスワードは password で接続する。

使える主な値:
DSN
ユーザDSNかシステムDSNに登録してある名前の設定を使用。
 ユーザDSNかシステムDSNか違いは,WindowsへのログインID単位での設定がユーザDSNで,システムDSNは登録すれば全てのユーザで使える。ユーザDSNは同じ名前で登録しても,ユーザが異なれば,内容が違う。多分,システムDSNに同じ名前があるときは,システムDSNよりも優先される。(未確認)(^^;。

UID
データベース接続時に使うユーザID

PWD
データベース接続時に使うパスワード
 注意!プログラム中にパスワードを保存するときは,簡単な暗号化をすべきだ。

FILEDSN
 ファイルDSNを指定する。これもあらかじめ登録してあること!

DRIVER
 ODBCドライバを直接していする。DSNの登録を利用しない場合はこれ。ただし,これを使うと,接続に必要な設定を全てプログラムで持つのでコードなどが長くなる。ここの値は例外でドライバ名は,{ } で囲んでやる必要がある。
例:
ODBCのドライバ名が Any Driver なら
DRIVER={Any Driver}
としてやる

SERVER
 データベースサーバを指定する場合に記述する。主に 上のDRIVERを指定するときに使用。


SQLDriverConnect の最後の引数に
SQL_DRIVER_NOPROMPT
を指定すると,ユーザブロンプトを表示しない。しかし,
SQL_DRIVER_COMPLETE または SQL_DRIVER_PROMPT を指定すると,
ユーザ(このソフトを使う人)に入力を要求する。

この記事へのコメント

通りすがり
2007年08月12日 13:10
DNS->DSNです

この記事へのトラックバック