【问题标题】:Microsoft - ODBC Driver Manager - Data source name not found and no default driver specifiedMicrosoft - ODBC 驱动程序管理器 - 未找到数据源名称且未指定默认驱动程序
【发布时间】:2017-04-06 10:27:35
【问题描述】:

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

请提出解决步骤。

【问题讨论】:

  • ODBC 中的驱动程序名称是什么?两个安装的名称是否相同(例如Oracle in OraClient12g_home1)?

标签: oracle winapi odbc instantclient


【解决方案1】:

您在哪里定义了 ODBC 数据源?您必须单独执行此操作

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

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

【讨论】:

  • 在我的 64 位机器上,ODBC 数据源位于 C:\Windows\SysWOW64,而在我的 32 位机器上,ODBC 数据源位于 c:\windows\system32 我正在设置环境变量,如 PATH , TNS_HOME, ORACLE_HOME 在代码中使用 _putenv()。我正在使用 DSN=%s;UID=%s;PWD=%s 之类的 connstring 在代码中创建 DSN。
【解决方案2】:

感谢大家的回复。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-10
    • 2011-11-24
    • 2011-06-02
    • 2018-02-12
    相关资源
    最近更新 更多