您可以使用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了解更多信息。