我用 VC++ 开发了一个应用程序来连接到 Oracle DB 并访问它的数据。它需要创建一个 DSN 并设置一些环境变量,如 PATH、ORACLE_HOME、TNS_ADMIN 等,我已在我的 VC++ 代码中以编程方式完成这些操作。我已经更新了所需的注册表项。我在我的机器上安装了 32 位 Oracle Instant Client。
http://download.oracle.com/otn/nt/instantclient/121020/instantclient-basic-nt-12.1.0.2.0.zip http://download.oracle.com/otn/nt/instantclient/121020/instantclient-odbc-nt-12.1.0.2.0.zip
我已经在 Windows 7 64 位机器上使用 Win32 选项作为目标平台编译并构建了应用程序 exe。这个 exe 在 Windows 7 64 位机器上运行良好,我能够使用 SQLDriverConnect() 成功建立数据库连接。
但是当我在 Windows 32 位机器上进行相同的设置时,比如安装 32 位 Oracle Instant Client,设置一些环境变量,如 PATH、ORACLE_HOME、TNS_ADMIN 等,更新所需的注册表项并尝试运行相同的应用程序 exe(在 64 位机器上使用) ,这会产生以下错误:
[Microsoft] - [ODBC 驱动程序管理器] 未找到数据源名称且未指定默认驱动程序。
请建议解决步骤。
您在哪里定义 ODBC 数据源?你必须单独做这个
64 位使用
%SYSTEMROOT%\system32\odbcad32.exe
(通常c:\windows\system32\odbcad32.exe
)
和32位使用
%SYSTEMROOT%\SysWOW64\odbcad32.exe
(通常c:\Windows\SysWOW64\odbcad32.exe
)
谢谢大家的回复
无论如何我已经解决了这个问题。
正如我之前提到的,我正在创建 DSN 并以编程方式更新 DSN 的注册表项,注册表路径对于 64 位机器和 32 位机器应该不同。
在 64 位机器上,DSN 注册表路径为:
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC\ODBC.INI]
在 32 位机器上,DSN 注册表路径为:
[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI]
这解决了我在 32 位机器注册表中的新路径创建 DSN 注册表条目后的问题。