SQLGetPrivateProfileString
ODBC API を使用して、作成された DSN の内容を取得できます。
int SQLGetPrivateProfileString(
LPCSTR lpszSection,
LPCSTR lpszEntry,
LPCSTR lpszDefault,
LPCSTR RetBuffer,
INT cbRetBuffer,
LPCSTR lpszFilename);
ここ、
lpszSection = 詳細が必要なレジストリ セクション。あなたの場合はDSN名になります。
lpszEntry = 値を抽出するキー。データベース名情報を取得したいので、レジストリ エントリ HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI[YOUR_DSN_NAME] をチェックして、データベース名情報を格納するためのキー名を確認する必要があります。これは、ドライバーが異なれば、データベース名を格納するためのキー名も異なる可能性があるためです。
lpszDefault = キーが見つからない場合、最後の引数 (lpszEntry) で指定されたキーのデフォルト値。
RetBuffer = 指定されたキーの値が受信される出力バッファへのポインタ。
cbRetBuffer = RetBuffer が指すバッファーのサイズ (文字数)。
lpszFilename = これらのエントリを検索するファイル名。この場合は odbc.ini になります。
サンプル例
CHAR *dsn_name = "Your DSN name";
CHAR db_name[20];
char *odbcini = NULL;
odbcini = "odbc.ini";
SQLGetPrivateProfileString(dsn_name, (CHAR*)"DATABASE", (CHAR*)"", db_name,
sizeof(db_name), odbcini);
設定モードに応じて、レジストリ エントリ HKEY_CURRENT_USER または HKEY_LOCAL_MACHINE またはその両方を検索します (SQLSetConfigMode ODBC API を使用して設定できます)。モードが明示的に設定されていない場合、HKEY_CURRENT_USER と HKEY_LOCAL_MACHINE の両方が検索されます。詳細については、 https://docs.microsoft.com/en-us/sql/odbc/reference/syntax/sqlgetprivateprofilestring-functionを参照してください。