当安装程序未创建标准 DSN 时,如何在 64 位 Server 2008 上使用 32 位 ODBC 驱动程序?

StackOverflow https://stackoverflow.com/questions/1134827

我遇到了一些第三方软件的问题,我们使用这些软件来跟踪计算机实验室中的软件许可证使用情况。在收到该公司的兼容性保证并运行一些初步测试表明该应用程序可以在 64 位环境中运行后,我们最近将该应用程序迁移到了 64 位 Server 2008。不幸的是,进行测试的人没有测试我拥有的几个应用程序的功能,这些应用程序依赖于访问数据来对数据进行实时和后处理以生成一些报告。

事实证明,该应用程序没有 64 位 ODBC 驱动程序来访问其内部数据,并且无法使用 64 位 SQL Server ODBC 驱动程序将其数据导出到 SQL Server。它确实包含并安装了 32 位 ODBC 驱动程序,但它将其安装为用户数据源,而不是系统数据源,这意味着运行实时集合的 Windows 服务无法找到它。我也无法创建系统 DSN,因为数据源管理控制台找不到已安装的驱动程序。

我的问题是如何为此连接配置数据源,以便我可以从系统帐户下运行的 C#/.NET Windows 服务访问该数据源?

既然我已经找到了一种方法,我将提供我的解决方案作为答案(与 常问问题 关于如何回答你自己的问题)。

如同:有哪些软件可以将 64 位 ODBC 应用程序桥接到 Windows 上的 32 位 ODBC 驱动程序?

有帮助吗?

解决方案

事实证明,您可以使用以下命令创建 32 位 ODBC 连接 C:\Windows\SysWOW64\odbcad32.exe. 。我的解决方案是创建 32 位 ODBC 连接作为系统 DSN。这仍然不允许我连接到它,因为 .NET 无法查找它。经过大量但无果的搜索,找到如何让 OdbcConnection 类在中查找 DSN 正确的位置, ,我偶然发现一个网站,建议修改注册表以解决​​不同的问题。

我最终直接在下面创建了 ODBC 连接 HKLM\Software\ODBC. 。我在 SysWOW6432 项中查找了使用 32 位版本的 ODBC 管理工具设置的参数,并在标准位置重新创建了该参数。但是,我没有添加驱动程序的条目,因为该应用程序的标准安装程序也没有安装该驱动程序。

(手动)创建条目后,我启动了 Windows 服务,一切都很顺利。

其他提示

打开IIS管理器,选择应用程序池,选择您正在使用的应用程序池,单击右侧菜单中的高级设置。在一般情况下,将“启用32位应用程序”设置为“ true”。

这些答案中有很多很旧,所以我想我会使用我认为很有帮助的解决方案进行更新。

我们的问题与OP相似,我们将32个位XP机器升级到64位Windows 7,并且使用32位ODBC驱动程序的应用程序软件不再能够写入我们的数据库。

事实证明,有两个ODBC数据源管理器,一个是32位,一个是64位。因此,我必须运行C: Windows Syswow64 odbcad32.exe中找到的32位版本。在ODBC数据源管理器中,我可以转到系统DSN选项卡,并使用添加按钮将驱动程序添加到列表中。 (您可以检查“驱动程序”选项卡以查看可以添加的驱动程序列表,如果您的驱动程序不在此列表中,则可能需要安装它)。

下一个问题是我们运行的软件使用了“任何CPU”。这将使操作系统为64位,因此它将查看64位ODBC数据源。因此,我不得不强迫该程序作为X86程序编译,然后告诉它查看32位ODBC数据源。要将您的程序设置为X86,在Visual Studio中转到您的项目属性,在顶部的“构建”选项卡下有一个平台下拉列表,然后选择x86。如果您没有源代码并且无法将程序编译为X86,则可以右键单击程序.exe,然后转到兼容性选项卡,然后选择适合您的兼容性。

一旦我添加了驱动程序,并且程序指向正确的驱动程序,一切都像用过一样。希望这可以帮助使用旧软件的任何人。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top