SQL Server DSN-Less ODBC指定32位驱动程序

Jar*_*man 8 sql-server odbc database-connection 32-bit dsn

我正在使用我最近更新到.NET 4.5的旧应用程序.该应用程序一直在使用DSN ODBC连接.但是,对于应用程序,它是从网络驱动器上的单个位置访问的,因此要求DSN没有意义,并且它将简化部署和更新以使用无DSN的连接字符串到位.我正在做一个基本的字符串:

Driver={SQL Server}; Server=; Database=; UID=; PWD=
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是应用程序编译为32位,但可以在32位或64位机器上使用.在64位机器上我收到此错误:

指定的DSN包含驱动程序和应用程序之间的体系结构不匹配

这本质上意味着它正在尝试将64位驱动程序用于32位应用程序.这很容易处理,除了SQL Server的驱动程序名称对于32位和64位似乎是相同的.那么如何在连接字符串中仅指定32位驱动程序?

Had*_*adi 3

“要管理64位平台下连接到32位驱动程序的数据源,请使用c:\windows\sysWOW64\odbcad32.exe。要管理连接到64位驱动程序的数据源,请使用c:\ windows\system32\odbcad32.exe。在 64 位 Windows 8 操作系统上的管理工具中,有 32 位和 64 位 ODBC 数据源管理器对话框的图标。阅读更多"

如果您使用 64 位 odbcad32.exe 配置或删除连接到 32 位驱动程序的 DSN,您将收到以下错误消息:

指定的 DSN 包含驱动程序和应用程序之间的体系结构不匹配

要解决此错误,请使用 32 位 odbcad32.exe 配置或删除 DSN。

参考


旁注:确保所有引用Copy Local属性都设置为 True,甚至是系统程序集。我认为问题可能出在 GAC 中保存的程序集位置,因此在本地复制程序集时可能会修复该问题

  • 谢谢,但我认为人们不明白这是为了无 DSN 连接。这意味着我将连接字符串直接传递到.NET 的 ODBC,并完全绕过您正在谈论的 odbc 配置工具。同样,在这个无 DSN 连接字符串中,我引用预安装的 32 位和 64 位 SQL Server ODBC 驱动程序。因此我的问题。这不是使用什么工具进行配置或安装什么驱动程序的问题(因为 Windows 默认安装了这两个位版本)。 (3认同)
  • 请记住,如果我确实使用基于 DSN 的连接字符串,那么一切都会正常工作。实际上,如果我有两个同名的 DSN,并且分别为 32 位和 64 位版本,则基于 DSN 的连接字符串会自动选择正确的 DSN。我想要的是连接字符串绕过任何 DSN 并且完全独立的地方。 (3认同)