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

时间:2010-01-02 13:52:50

标签: c# .net oledb 32bit-64bit jet

我在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)

20 个答案:

答案 0 :(得分:227)

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

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

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

您可以从Microsoft Access Database Engine 2010 Redistributable

下载此驱动程序

答案 1 :(得分:109)

如果问题在ASP.NET中仍然存在,那么我只需要在应用程序池的高级设置中将“启用32位应用程序”设置更改为True。

答案 2 :(得分:45)

我有同样的问题

  

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

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

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

答案 3 :(得分:21)

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

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

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

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

AccessDatabaseEngine_x64.exe /passive

Download drivers 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\"";
}

如果使用AnyCPU标志编译应用程序,它将在64位操作系统上查找64位访问驱动程序,在32位操作系统上查找32位访问驱动程序。

答案 4 :(得分:19)

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

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

这就是

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

答案 5 :(得分:17)

如果您的应用程序在localIIS上运行,您可以通过AppPool的高级设置

中的启用32位应用程序解决此问题

enter image description here

答案 6 :(得分:8)

我有同样的问题。我将应用程序配置更改为x86,然后就可以了!

答案 7 :(得分:7)

我刚将项目属性更改为x64格式

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

答案 8 :(得分:3)

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

开发环境 Windows 7旗舰版 - 64位 .Net Framework 4.5 提供商= Microsoft.Jet.OLEDB.4.0

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

enter image description here

答案 9 :(得分:2)

虽然更优化的解决方案是如上所述简单地重新编译,但这需要访问源代码。就我而言,我只有完成的.exe并且必须使用这个解决方案。它使用.Net SDK中的CorFlags.exe来更改应用程序的加载特性。

  1. 下载.Net Framework SDK(我个人使用3.5,但所使用的版本应该等于或高于您的应用程序所需的.Net。
  2. 安装时,您只需CorLibs.exe,所以只需检查 Windows开发工具
  3. 安装完成后,找到您的CorFlags.exe。对于我安装的.Net Framework 3.5 SDK,它位于C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin
  4. 打开命令提示符并键入path/to/CorFlags.exe path/to/your/exeFile.exe /32Bit+
  5. 你完成了!这将为程序设置启动标志,使其以32位WOW64模式启动,因此可以访问microsoft.jet.oledb.4.0。

答案 10 :(得分:2)

我的桌面应用程序遇到了这个问题('Microsoft.Jet.OLEDB.4.0'提供程序未在本地计算机上注册)。我没有选择构建32位应用程序。希望这会在同样的情况下帮助其他人。

我做了以下事情,问题就消失了:

  1. 按照neo

  2. 的建议安装了64位版本的Microsoft Access Database Engine 2010 Redistributable
  3. 将我的提供程序更改为Microsoft.ACE.OLEDB.12.0

答案 11 :(得分:1)

只需根据您的机器更改属性即可: - )

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

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

答案 12 :(得分:1)

我已经从

更改了我的连接字符串

var myConnectionString = string.Format(" Provider = Microsoft.Jet.OLEDB.4.0; Data Source = {0}; Persist Security Info = True; Jet OLEDB:Database Password =;",gisdbPath );

到此:

var myConnectionString = string.Format(" Provider = Microsoft.Jet.OLEDB.4.0; Mode = Share Deny None; Data Source = {0}; user id = Admin; password =;", gisdbPath);

我的工作从来没有要求过Microsoft.Jet.OLEDB.4.0'注册。

答案 13 :(得分:1)

更改IIS设置应用程序池高级设置。启用32位应用程序

答案 14 :(得分:0)

我在Windows 8.1上运行“SQL Server 2014导入和导出数据(64位)”时遇到了同样的异常。

要解决此问题,我已完成以下操作

启动了SQL Server 2014导入和导出数据(32位)而不是64位,它对我有用。我没有更改任何IIS设置,也没有安装任何额外的软件。

答案 15 :(得分:0)

在旧版本的IIS中,您将找不到Advance Settings,因此要启用Enable 32-bit Applications,您必须执行以下命令:

cscript%SYSTEMDRIVE%\ inetpub \ adminscripts \ adsutil.vbs SET W3SVC / AppPools / Enable32bitAppOnWin64 1

%SYSTEMROOT%\ Microsoft.NET \ Framework \ v2.0.50727 \ aspnet_regiis.exe -i

参考:Here

答案 16 :(得分:0)

我正在使用VS2013 for Winforms,以下解决方案适用于我。

答案 17 :(得分:0)

确实没有64位版本的Jet - 并且没有计划(显然)制作一个版本。

您可以使用ACE 64位驱动程序: http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=23734

  • 但我不知道如果你需要回到Jet为你的32位应用程序如何工作。

但是,您可以在Express版本中将项目切换到32位(我还没有尝试过,并且不再以任何风格安装2008)

也许是时候完全废弃Access数据库了,咬紧牙关去找SQL服务器?

答案 18 :(得分:0)

转到开始->运行并键入cmd 这将启动命令提示符 (也可以从“开始”->“程序”->“附件”->“命令提示符”中获得

键入cd ..并按回车键 键入cd ..并再次按回车键(继续执行直到提示显示:>)

现在您需要转到一个特殊文件夹,该文件夹可能是c:\ windows \ system32,或者可能是c:\ winnt \ system32,或者可能是c:\ windows \ sysWOW64 尝试键入每个例如 cd c:\ windows \ sysWOW64 (如果显示系统找不到指定的路径,请尝试下一个) cd c:\ windows \ system32 cd c:\ winnt \ system32 如果其中之一没有引起错误,请停止,您已经找到正确的文件夹。

现在您需要通过键入以下命令并在每个命令之后按回车键来注册OLE DB 4.0 DLL

regsvr32 Msjetoledb40.dll regsvr32 Msjet40.dll regsvr32 Mswstr10.dll regsvr32 Msjter40.dll regsvr32 Msjint40.dll

答案 19 :(得分:-2)

Jet没有64位提供商。如果您想支持多个数据库源,包括Jet到Excel,您至少需要应用程序的那部分才能在32位进程中运行。

编译x86时遇到的错误有点奇怪。在这种情况下,我无法看到如何最终引用64位程序集。