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

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

所以作为这个问题的一个解决scheme,我已经把项目的build属性改成了X86,这样它就可以build立32位模式,并在32位机器上重build项目。 但是,同一个项目使用其他数据库驱动程序(DB2,SQL等)连接到其他数据库。 因此,当我在64位操作系统中再次部署我的应用程序时,它会抛出exception“试图在32位平台上加载64位程序集”。

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

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

因此,如果我们在64位服务器上使用Microsoft.Jet.OLEDB.4.0驱动程序,则必须强制我们的应用程序以32位模式构build(这是我在对这个已知问题进行广泛search时find的答案)并导致我的代码的其他部分中断。

幸运的是,现在微软已经发布了一个兼容64位的2010 Office System Driver ,可以用来替代传统的Microsoft.Jet.OLEDB.4.0驱动程序。 它可以在32位以及64位服务器上运行。 我已经使用它来进行Excel文件操作,并且在两种环境下都能正常工作。 但是这个驱动程序在BETA中

您可以从Microsoft Access数据库引擎2010 Redistributable下载此驱动程序

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

我有同样的问题

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

我用neo来应用这个答案,但是直到我将连接string中的提供者改为“Provider = Microsoft.ACE.OLEDB.12.0;”之后才能正常工作。

希望这将有助于如果有人面临同样的问题。

我有一个相同的消息,我有一个在Visual Studio 2010上做的网页,我读了一个file.xls在这个页面上,在我的项目visual没有任何问题,当我把它放在我的IIS本地扔我一个'微软.Jet.OLEDB.4.0“提供程序未在本地计算机上注册” ,我按照此步骤修复了该问题,

1.打开IIS
2.在高级设置中更改appPool
3.真正启用到32位应用程序。

就这样

我在Active Solution Platform上将Configuration Manager更改为X86

我知道这是相当古老的问题,许多人已经回答。 但是我总结了一些理解的东西:

如果文件扩展名是xls和OS是32位,那么只有你可以使用“ Microsoft.Jet.OLEDB.4.0 ”。 微软还没有发布这个驱动程序的64位版本。

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

总是在OS 64位上安装Microsoft.ACE.OLEDB.12.0的64位驱动程序。 如果您已经安装了Office 32位,那么您需要使用/ passive参数从cmd运行驱动程序。

 AccessDatabaseEngine_x64.exe /passive 

下载驱动程序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\""; } 

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

在这里输入图像描述

我遇到过同样的问题。 我改变了应用程序configuration到x86 ,然后它的工作!

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

项目—>属性—>生成—>目标框架—> X64

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

只需更改基于您的机器的属性,所有已经完成:-)

项目—>属性—>生成—>目标框架—> X64

要么

项目—>属性—>构build—>目标框架—> X86

我用我的桌面应用程序(“Microsoft.Jet.OLEDB.4.0”提供程序未在本地计算机上注册)遇到此问题。 我没有selectbuild立一个32位的应用程序。 希望这可以帮助其他人在相同的情况下。

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

  1. 按照neo的build议安装64位版本的Microsoft Access数据库引擎2010 Redistributable

  2. 将我的提供程序更改为Microsoft.ACE.OLEDB.12.0

我已经改变了我的连接string

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注册。

Jet的确没有64位版本,而且没有计划(显然)生产一个。

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

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

但是,您可能能够将项目切换到Express版本的32位(我还没有尝试过,没有2008年的任何味道了)

  • 有一个线程在这里谈论它: http : //xboxforums.create.msdn.com/forums/t/4377.aspx#22601

也许现在是时候完全取消Access数据库,咬紧牙关,然后去SQL服务器呢?

我为Winforms使用VS2013,下面的解决scheme为我工作。

  • 下载: http : //www.microsoft.com/en-us/download/details.aspx?displaylang= en& id=23734

  • 然后将VS目标平台设置为x86。

在较旧版本的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

参考: 这里

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

要解决这个问题,我做了以下的事情

启动SQL Server 2014导入和导出数据(32位),而不是64位 ,它正在为我工​​作。 我没有改变任何IIS设置,也没有安装任何额外的软件。

我知道当我在新服务器上部署我的应用程序时,我反复出现了这个问题,因为我正在使用此驱动程序连接到Excel文件。 所以这就是我最近在做的事情。

有一个Windows Server 2008 R2,我安装了一个x64位机器的Access驱动程序,我摆脱了这个消息,这让我非常高兴,只是碰到另一个。

下面这个在我的开发机器上出色地工作,但在服务器上,即使在安装最新的ODBC驱动程序后,也给我一个错误,我认为这是问题,但这是我解决它的方法。

 private const string OledbProviderString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\\OlsonWindows.xls;Extended Properties=\"Excel 8.0;HDR=YES\""; 

我用下面的新提供者replace:

 private const string OledbProviderString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\OlsonWindows.xlsx;Extended Properties='Excel 12.0;HDR=YES;';"; 

但是当我这样做的时候,你应该注意一件事情。 使用.xlsx文件扩展名和Excel版本是12.0。

当我进入这个错误信息错误:“无法find可安装的ISAM”后 ,我决定改变一下,如下所示:

 private const string OledbProviderString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\OlsonWindows.xls;Extended Properties='Excel 8.0;HDR=YES;';"; 

是的,我完成了这个讨厌的事情,但在这里我得到另一个消息Microsoft Access数据库引擎无法打开或写入文件'time_zone'。 它已经由另一个用户专门打开,或者您需要查看和写入其数据的权限。 这告诉我我离解决它不远。

也许还有另外一个打开文件的过程,我所要做的就是重新启动,所有的操作都能按照预期顺利进行。

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

开发环境: Windows 7旗舰版 – 64位.Net Framework 4.5 Provider = Microsoft.Jet.OLEDB.4.0

已经通过从任何CPU将平台目标更改为X86来解决。 项目属性>>构build>>平台目标。

在这里输入图像描述

虽然更好的解决scheme是按照上面的build议重新编译,但是需要访问源代码。 在我的情况下,我只有完成.exe,必须使用此解决scheme。 它使用.Net SDK中的CorFlags.exe来更改应用程序的加载特性。

  1. 下载.Net框架SDK(我个人使用3.5 ,但是使用的版本应该在你的应用程序所需的.Net以上。
  2. 安装时,您只需要检查CorLibs.exe ,只需检查Windows开发工具即可
  3. 安装完成后,find您的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+

你完成了! 这将为您的程序设置起始标志,使其以32位WOW64模式启动,因此可以访问microsoft.jet.oledb.4.0。

Jet没有64位的提供者。 如果您想要支持多个数据库源(包括Jet到Excel),则至less需要您的应用程序的这一部分以32位进程运行。

当你编译x86时出现的错误有点奇怪。 在这种情况下,我看不出如何引用64位程序集。

最简单的解决scheme是进入项目属性,并从任何CPU将您的构build目标设置为x86。