Microsoft.Jet.OLEDB.4.0'提供程序未在本地计算机上注册

neo*_*neo 184 .net c# oledb jet 32bit-64bit

我在32位Windows 2008服务器中创建了一个在.NET 3.5中开发的Windows应用程序.在64位服务器中部署应用程序时,它显示错误"Microsoft.Jet.OLEDB.4.0'提供程序未在本地计算机上注册".

因此,作为此问题的解决方案,我已将项目的构建属性更改为X86,以便它将以32位模式构建,并在32位机器中重建项目.但是,同一个项目使用其他数据库驱动程序(DB2,SQL等)连接到其他数据库.因此,当我在64位操作系统中再次部署我的应用程序时,它会抛出异常"尝试在32位平台上加载64位程序集".

我使用Microsoft.Jet.OLEDB.4.0驱动程序读取和写入Excel(.xls)

neo*_*neo 232

我找到了解决这个问题的方法.我在问题中描述的问题基本上是由于64位操作系统中的Microsoft.Jet.OLEDB.4.0驱动程序不兼容.

因此,如果我们在64位服务器中使用Microsoft.Jet.OLEDB.4.0驱动程序,我们必须强制我们的应用程序以32位模式构建(这是我在广泛搜索此已知问题时找到的答案)这会导致我的代码的其他部分中断.

幸运的是,现在微软已经发布了64位兼容的2010 Office System Driver,可以替代传统的Microsoft.Jet.OLEDB.4.0驱动程序.它适用于32位和64位服务器.我已经将它用于Excel文件操作,它在这两种环境中都适用于我.但是这个驱动程序是在BETA中.

您可以从Microsoft Access数据库引擎2010可再发行组件下载此驱动程序

  • 是的,虽然可以使用64位兼容的Access数据库引擎,但它要求系统上没有安装32位版本的MS Office产品(例如32位MS Word),这是一个大问题.解决方法是使用32位版本的Access Database Engine 2010并强制.NET应用程序以32位模式运行(例如,通过在Configuration Manager中选择x86平台).正确的解决方案是用更好的替代方案取代MS Access. (15认同)
  • 我还必须将连接字符串从使用Microsoft.Jet.OLEDB.4.0更改为Microsoft.ACE.OLEDB.12.0 (7认同)
  • 还要特别注意该链接上的说明:) (6认同)
  • 我遇到过同样的问题.我将应用程序配置更改为x86,然后就可以了! (4认同)
  • 菜鸟问题:我可以像在“我的应用程序内”那样分发此驱动程序吗?还是每个想要使用我的应用程序的用户都必须手动安装它? (2认同)

Jas*_*ker 112

如果问题在ASP.NET中仍然存在,那么我所要做的就是在应用程序池的高级设置中将"启用32位应用程序"设置更改为True.

  • 现在完全可以在 64 位代码中做到这一点。安装 [neo's answer](http://stackoverflow.com/a/1992009/33080) 中的可再发行链接,然后使用 [Iqbal's answer](http://stackoverflow.com/a/16117432/33080) 中建议的 Provider 字符串)。然后对这两个答案投赞成票。就是这样! (3认同)
  • 缺点是池将在 32 位模式下运行。我们将改用 ACE 来避免这种情况。 (2认同)

Iqb*_*bal 49

我也有同样的问题

Microsoft.Jet.OLEDB.4.0'提供程序未在本地计算机上注册

我通过neo应用了答案但是在我将连接字符串中的提供程序更改为"Provider = Microsoft.ACE.OLEDB.12.0;"之后它才起作用.

如果有人面临同样的问题,希望这会有所帮助.

  • 就是这个!对于64位服务器,安装由neo链接的[可再发行组件](http://www.microsoft.com/en-us/download/details.aspx?id=13255)(显然是64位变体),然后按照此答案中的指定更改提供程序,_then_它将起作用. (4认同)
  • 我发现这很有效,而将应用程序限制为 32 位则没有任何区别。 (2认同)

Rom*_*ain 27

我知道这是很老的问题而且很多人都回答了.但我总结了理解的事情:

如果文件扩展名为xls且OS为32位,则只能使用" Microsoft.Jet.OLEDB.4.0".微软尚未发布此驱动程序的64位版本.

如果文件扩展名是xlsx或OS是64位,则必须使用" Microsoft.ACE.OLEDB.12.0".以32/64位模式编译的应用程序不会影响驱动程序的选择.

始终安装Microsoft.ACE.OLEDB.12.0OS 64位的64位驱动程序.如果您已经安装了Office 32位,则需要使用/ passive参数从cmd运行驱动程序.此hack仅适用于Office 2013,Microsoft已从Office 2016 for Microsoft.ACE.OLEDB.16.0驱动程序停止此解决方法.

AccessDatabaseEngine_x64.exe /passive
Run Code Online (Sandbox Code Playgroud)

下载驱动程序Microsoft.ACE.OLEDB.12.0

private void ProcessFile(string path)
{
    string connString = string.Empty;

    if (Path.GetExtension(path).ToLower().Trim() == ".xls" && Environment.Is64BitOperatingSystem == false)
        connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=2\"";
    else
        connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=2\"";
}
Run Code Online (Sandbox Code Playgroud)

如果使用AnyCPU标志编译Application,它将在64位OS上查找64位Access驱动程序,在32位OS上查找32位访问驱动程序.

  • 感谢您的回答,但是,我在 Windows 10 上使用 VS2015 并使用 X64。当我将项目配置从 AnyCPU 更改为 X86 时,问题就消失了。我不必安装任何额外的驱动程序。 (2认同)

小智 19

我有同样的消息,我在visual studio 2010上有一个网页,我在那个页面上读了一个file.xls,在我的项目中可视化没有任何问题,当我把它放在我的IIS本地时给我一个'微软.Jet.OLEDB.4.0'提供程序未在本地计算机上注册' ,我按照以下步骤修复了该问题,


1.- 打开IIS 2. - 在高级设置上更改appPool
3.-true以启用32位应用程序.

就这样

ps.I在Active Solution Platform上将Configuration Manager更改为X86


小智 17

如果您的应用程序在localIIS上运行,您可以通过在AppPool的高级设置中启用32位应用程序来解决此问题

在此输入图像描述


Kak*_*ppa 8

我遇到过同样的问题.我将应用程序配置更改为x86,然后它工作了!


Muh*_*eeq 7

我只是将我的项目属性更改为x64格式

项目--->属性--->构建--->目标框架---> X64


小智 5

我们在桌面应用中遇到了这个问题。

开发环境: Windows 7 Ultimate-64位.Net Framework 4.5 Provider = Microsoft.Jet.OLEDB.4.0

通过将平台目标从任何CPU更改为X86可以解决此问题。项目属性>>构建>>平台目标。

在此处输入图片说明