S-JIS[2025-07-16]

ODBCドライバーDSN読み込みメモ

ODBCドライバー実装する際のデータソースの読み込み方法について。


概要

ODBC関数のSQLConnect()はデータソース名(DSN)を指定して呼び出す。
また、SQLDriverConnect()で接続文字列に「DSN=データソース名」という指定をすることが出来る。

つまり、SQLConnect()を実装するなら(また、SQLDriverConnect()でDSNに対応するなら)データソースからデータを読む必要がある。

データソースからデータを読むには、インストーラーDLL APIリファレンス関数のSQLGetPrivateProfileString()を使用する。

この関数は、Windowsの場合はodbccp32.dllに含まれている。
unixODBCの場合は(通常のODBC関数と同じく)libodbc.soに含まれているらしい。


SQLGetPrivateProfileString

SQLGetPrivateProfileString関数(またはUnicode版のSQLGetPrivateProfileStringW関数)は、データソースから値を読み込む関数。


SQLGetPrivateProfileStringの引数は以下の通り。

引数名 無印関数の型 W関数の型 説明
section LPCSTR LPCWSTR データソース名(DSN)
entry LPCSTR LPCWSTR 設定値のキー
default LPCSTR LPCWSTR デフォルト値(無い場合は空文字列を指定する)
returnBuffer LPCSTR LPCWSTR 設定値を返すバッファー(の先頭アドレス)
returnBufferSize INT INT バッファーの長さ(文字数)
filename LPCSTR LPCWSTR odbc32の場合は「odbc.ini」、unixODBCなら「.odbc.ini」とか

sectionには、SQLConnect()やSQLDriverConnect()で渡されたDSNを指定する。
entryには設定値のキー(取得したい設定値の名称)を指定する。
なお、sectionやentryの大文字小文字は無視されるようだ。

defaultは、設定値(キー)が見つからなかった場合のデフォルト値。NULL不可(odbc32だとNULLでも通るようだけど、unixODBCでは駄目だった)

filenameは設定値が書かれているファイルのファイル名ということらしい。
odbc32(Windows)だと設定値はレジストリーから取得するのでファイル名って何じゃいということになるが、「odbc.ini」を指定する。(他のファイル名だとエラーになる模様)
unixODBCだと何を指定しても関係ない模様。


SQLGetPrivateProfileStringの返り値の型はINTで、バッファーに入れられた文字列の文字数が返る。
これが0未満ならエラーということになるようだ。


ODBCドライバーへ戻る / ODBCへ戻る / 技術メモへ戻る
メールの送信先:ひしだま