30

我有一个使用 Jet OLEDB 4.0 的 32 位 .net 2.0 应用程序。

它在 Windows 8 32 位上运行 fin,但不能在 64 位上运行。在 64 位上我收到一个错误:

'Microsoft.Jet.OLEDB.4.0' 提供程序未在本地计算机上注册。在 System.Data.OleDb.OleDbServicesWrapper.GetDataSource(OleDbConnectionString 常量,DataSourceWrapper & datasrcWrapper)

我知道您不能将该数据库(驱动程序)与64位 EXE 一起使用。但是我没有读到任何关于它不能与32位 exe 一起使用的信息。

我尝试了什么:

  1. 安装了 MS Access 数据库引擎 2010 32 位(并重新启动)
  2. 验证msjet40.dll在“C:\Windows\SysWOW64\msjet40.dll”目录下,并用RegSvr32注册。

所以我认为(希望)如果我可以安装数据库支持它就会工作。

问题是,我找不到任何下载它的地方。

4

2 回答 2

26

在现代 Windows 上,此驱动程序默认不再可用,但您可以在 MS 站点上下载Microsoft Access Database Engine 2010 Redistributable 。如果您的应用程序是 32 位,请务必下载并安装 32 位变体,因为据我所知,32 位和 64 位变体不能共存。

根据您的应用程序如何定位其数据库驱动程序,这可能就是所需要的。但是,如果您使用 UDL 文件,则有一个额外的步骤 - 您需要编辑该文件。不幸的是,在 64 位机器上,用于编辑 UDL 文件的向导默认是 64 位的,它不会看到 JET 驱动程序,只会拍打它首先在 UDL 文件中找到的任何驱动程序。有2种方法可以解决这个问题:

  1. 像这样启动 32 位 UDL 向导:C:\Windows\syswow64\rundll32.exe "C:\Program Files (x86)\Common Files\System\Ole DB\oledb32.dll",OpenDSLFile C:\path\to\your.udl. 请注意,我可以在 Win7 64 Pro 上使用此技术,但它不适用于 Server 2008R2(可能是我的错误,只是提一下)
  2. 在记事本或其他文本编辑器中打开 UDL 文件,它应该或多或少具有以下格式:

[oledb] ; Everything after this line is an OLE DB initstring Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Path\To\The\database.mdb;Persist Security Info=False

这应该允许您的应用程序正确启动。

于 2012-12-10T23:54:58.450 回答
3

确保在 Visual Studio 中的项目上以 x86 为目标。这应该可以解决您的问题。

于 2015-05-08T12:44:05.683 回答