Microsoft - ODBC驱动程序管理器 - 未找到数据源名称且未指定默认驱动程序

时间:2016-11-22 16:34:14

标签: oracle winapi odbc instantclient

我在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驱动程序管理器]未找到数据源名称且未指定默认驱动程序。

请建议解决步骤。

2 个答案:

答案 0 :(得分:0)

您在哪里定义ODBC数据源?你必须单独这样做

用于64位%SYSTEMROOT%\system32\odbcad32.exe(通常为c:\windows\system32\odbcad32.exe

和32位使用%SYSTEMROOT%\SysWOW64\odbcad32.exe(通常为c:\Windows\SysWOW64\odbcad32.exe

答案 1 :(得分:0)

感谢大家的回复。

无论如何我已经解决了这个问题。

正如我之前提到的,我正在以编程方式创建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注册表项后,这解决了我的问题。