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

时间:2009-07-16 00:25:59

标签: .net odbc 32bit-64bit registry

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

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

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

由于我已经想出办法,我会提供我的解决方案作为答案(与FAQ一致,如何回答你自己的问题)。

类似于: What software exists for bridging a 64-bit ODBC app to a 32-bit ODBC driver on windows?

3 个答案:

答案 0 :(得分:41)

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

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:2)

很多这些答案都很老了,所以我想我会用我认为有用的解决方案进行更新。

我们的问题类似于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并转到兼容性选项卡并选择适合您的兼容性。 / p>

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