![系统 DSN 与用户 DSN](https://linux22.com/image/1327033/%E7%B3%BB%E7%BB%9F%20DSN%20%E4%B8%8E%E7%94%A8%E6%88%B7%20DSN.png)
我公司的每台新电脑都经过相同的软件安装过程;特别是一个程序需要通过 ODBC 访问 MS SQL Server 数据库。然后,同一台电脑上的多个域用户在不同时间使用该程序。
在 Windows XP 机器上,我只需将 ODBC 连接设置为系统 DSN。无论哪个用户登录,连接都会对他起作用,我的工作就完成了。
最近,我们拥有越来越多的 Windows 7 机器,这种方法似乎不再有效。程序无法识别我在系统 DSN但它确实承认那些用户 DSN。我遇到的问题是,每次用户第一次登录计算机时,我都会接到电话并需要安装他或她自己的 DSN。
为什么这个在 XP 上有效,但在 7 上无效?我从一开始就做错了吗?
更新:也许原因不是 Windows 7,而是新电脑运行的是 64 位操作系统。我之所以这么说,是因为当我运行一个测试应用程序时 (源代码在这里)在 64 位 Windows 7 上,访问用户 DSN工作正常,但访问系统 DSN出现以下错误信息:
IM014:指定的 DSN 包含驱动程序和应用程序之间的体系结构不匹配
这Microsoft 文档表示在 64 位计算机上访问 32 位驱动程序时会发生这种情况,反之亦然。这很可能就是问题所在,因为当我将测试应用程序切换到 64 位时,系统 DSN 可以访问。
现在的问题是:为什么系统 DSN 会出现这种情况,而用户 DSN 不会出现这种情况 - 这两个 DSN 是否安装了不同的驱动程序?这意味着我将无法再使用系统 DSN,因为我对我们需要使用的软件没有影响。
答案1
微软文章管理数据源内容如下:
要在 64 位平台下管理连接到 32 位驱动程序的数据源,请使用
c:\windows\sysWOW64\odbcad32.exe
。要管理连接到 64 位驱动程序的数据源,请使用c:\windows\system32\odbcad32.exe
。在 64 位 Windows 8 操作系统的管理工具中,有 32 位和 64 位 ODBC 数据源管理器对话框的图标。如果您使用 64 位 odbcad32.exe 配置或删除连接到 32 位驱动程序的 DSN(例如,Microsoft Access 驱动程序 (*.mdb)),您将收到以下错误消息:
指定的 DSN 包含驱动程序和应用程序之间的体系结构不匹配
要解决此错误,请使用 32 位 odbcad32.exe 配置或删除 DSN。
您的应用程序显然是 32 位的。您是否使用了正确的 odbcad32.exe 来定义 DSN?
答案2
用户权限:确保用户能够访问系统 DNS 或用户 DNS。这里的情况是,Lotus-Notes 作为系统用户下的一项服务运行。没有与 ODBC 的连接。我们更改了服务的用户,问题就解决了。