317

I'm trying to get data from an Excel file on a button click event. My connection string is:

 string connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\source\\SiteCore65\\Individual-Data.xls;Extended Properties=Excel 8.0;";

When I click on the button, I got the following error:

The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine.

I have no clue how to fix this. My operating system is Windows 7.


  • Just a tangential comment: using OLEDB to read an Excel file is ancient tech, very slow, and as you've discovered, requires installing extra packages manually on your target machine. (Granted, the question was asked in 2011.) Rather use ClosedXml (available on NuGet) which works right out of the box. - Shaul Behr
  • @ShaulBehr Would have been nice, but ClosedXml only works for .xlsx files, not .xls - Jimmy
  • If you are importing into Sql Server you can run this query from ssms: execute master.dbo.xp_enum_oledb_providers It will tell you what providers it thinks you have. It old me I had both Microsoft.ACE.OLEDB.16.0 and Microsoft.ACE.OLEDB.12.0, but when I tried to import data, I got the same 'not registered on your local machine' as the OP, for both Excel 16 and Excel 2007 file formats (oledb.16.0 and oledb.12.0 respectively). It makes sense to cut your losses and give up on the Microsoft software at this point. - user1040323

30 답변


407

Well, you need to install it. You're looking for:


  • I downloaded these components and they did not work for me, I had to download the Microsoft Access Database Engine 2010 Redistributable from here: microsoft.com/en-in/download/details.aspx?id=13255 I'm sure that's because I'm using MS Office 2013. Thanks for pointing me in the right direction though. - Sizons
  • I had to install the access database engine and the 2007 Office System Driver: Data Connectivity Components here microsoft.com/en-us/download/confirmation.aspx?id=23734 to get it to work. - Chris
  • My situation, everything was working fine, then all the sudden it started getting this error. SO what could have happened to cause this? No code changed. - eetawil
  • In my case, I had to switch from "Any CPU" to x64 to match my architecture. - Rob Sedgwick
  • Jack the Ripper refers to the solution provided in the answer itself, not the comments. Installing the 2007 Office System Driver: Data Connectivity Components resolved the issue immediately. - silkfire

119

A 64-bit version of the 'Microsoft Access Database Engine 2010 Redistributable' that will allow you to use the 'Microsoft.ACE.OLEDB.12.0' provider is available here:
http://www.microsoft.com/en-us/download/details.aspx?id=13255

If you use the download from the accepted answer, you will need to build for x86, as pointed out by @backtestbroker.com.


  • If using VS 2012, also be sure that "Prefer 32-bit" checkbox is unchecked in the project's Properties >> Build >> General configuration. - devstruck
  • @post_erasmus - This step was THE KEY for me after installing the 64-bit DLL. (May not have even needed to install.) Thanks! - Buggieboy
  • I'm using VS 2008 (don't ask) and this solution didn't work until I read post_erasmus' tip and set 'Platform Target' to x64 in Properties >> Build >> General configuration of my application. Sorted, thanks! - Resource
  • The link in this answer also allows you to download and install a 32-bit version. Even though I have Windows 7 64-bit, Visual Studio 2013's IIS Express runs in 32-bit mode by default, and I already had some Office 2013 components installed in 32-bit, so the 32-bit installation is what I needed. - Eric Barr
  • With this answer, I also have to set "Enable 32-Bit Applications" on the Application Pool to False. - iowatiger08

52

depending on the app(32/64bit) using the connection you could just install

Summary:

  • all offices from 2007-2016 contain the provider "Microsoft.ACE.Oledb.12.0"
  • depending on your application architecture choose the appropriate runtime engine (32/64)
  • check your providers with the powershell-command from both 32 and 64bit shell:

    (New-Object system.data.oledb.oledbenumerator).GetElements() | select SOURCES_NAME, SOURCES_DESCRIPTION 
    
  • and you will see which provider your system can use

the long story: the strings can be found with http://live.sysinternals.com/strings.exe

eg. on a 64bit System with 32bit drivers installed

strings.exe -u -n 10 "c:\Program Files (x86)\Common Files\microsoft shared\OFFICE12\MSO.DLL" | findstr "ACE.O"
strings.exe -u -n 10 "c:\Program Files (x86)\Common Files\microsoft shared\OFFICE14\MSO.DLL" | findstr "ACE.O"
strings.exe -u -n 10 "c:\Program Files (x86)\Common Files\microsoft shared\OFFICE15\MSO.DLL" | findstr "ACE.O"

even in the upcoming office 2016

c:\Program Files\Microsoft Office\root\VFS\ProgramFilesCommonX64\Microsoft Shared\OFFICE16\MSO.DLL
c:\Program Files\Microsoft Office\root\VFS\ProgramFilesCommonX86\Microsoft Shared\OFFICE16\MSO.DLL

you will find the strings

  • Microsoft.ACE.OLEDB

  • Microsoft.ACE.Oledb.12.0

the Office 2013 comes also with csi.dll

c:\Program Files (x86)\Common Files\microsoft shared\OFFICE15\Csi.dll
c:\Program Files\Common Files\Microsoft Shared\OFFICE15\Csi.dll

which contains the "Microsoft.ACE.OLEDB.15.0"

and Office 2016

c:\Program Files\Microsoft Office\root\VFS\ProgramFilesCommonX64\Microsoft Shared\OFFICE16\Csi.dll
c:\Program Files\Microsoft Office\root\VFS\ProgramFilesCommonX86\Microsoft Shared\OFFICE16\Csi.dll

which has the "Microsoft.ACE.OLEDB.16.0" version


  • I got this error in VS2015 using Nuget LinqToExcel. Turns out, because I had the x64 ACE installed, I had to explicitly build for x64 (Configuration Manager), instead of targeting Any CPU. - subsci
  • Powershell showed "Microsoft.ACE.Oledb.12.0" was installed already. However installing the Access 2007 package (aka 2007 Office System Driver: Data Connectivity Components) got me up and going. Already on my system: Office 2016 Ent, Visual Studio 2017 Ent - SushiGuy
  • The PowerShell script that informs which version is installed is genius! Thank you @Bernhard - Rob Bowman
  • bit offtopic but this simple powershell is for your ODBC drivers : Get-OdbcDriver | select Name,Platform - Bernhard

29

I got this error/exception in Visual Studio 2010 when I changed my build in the Configuration Manager dialog box from "x86" to "Any CPU". This OLEDB database driver I understand only works in x86 and is not 64bit compatible. Changing the build configuration back to x86 solved the problem for me.


  • The OLEDB is compatible with x64. It can run under ANY platform, NOT ONLY x86, but as Any CPU as well. See full answer below: stackoverflow.com/a/32760211/3637582 - Merav Kochavi

28

The first thing you need to check is your build configuration of your application.

  • If you have built your project under x86 platform, then in order to resolve you issue you should install the following packages on your machine:

    1. In order to use the 'Microsoft.ACE.OLEDB.12.0' provider you must install the Microsoft Access Database Engine 2010 Redistributable first, this installation is available at: http://www.microsoft.com/download/en/details.aspx?id=13255 .

      After the installation has complete, try running you application, if this solves the issue great, if not, continue to step 2.

    2. This next step is an unexplained workaround, which works for Office 2010, even though it is the Data Connectivity Components of Office 2007. I am not quite sure why this works, but it does and this has been proven to work in almost all cases. You need to install the 2007 Office System Driver: Data Connectivity Components, this installation is available at: http://www.microsoft.com/download/en/confirmation.aspx?id=23734 .

      After this installation is complete, try running your application, this should resolve the issue.

  • If you are trying to run an application built under x64 or AnyCPU platform, I would recommend first validating that it runs as expected under the x86 platform. In the event that it does not run under that x86 platform, perform the steps in the first part and validate that it runs as expected.

    I did read that the MS Access drivers including the OLEDB Database driver works only under the x86 platform and is incompatible under the x64 or AnyCPU platform. But this appears to be untrue. I validated my application was running when building x86, then I installed the Access Database Engine using the passive flag.

    1. First download the file locally You can download the installation here: http://www.microsoft.com/en-us/download/details.aspx?id=13255
    2. Installing using the command prompt with the '/passive' flag. In the command prompt run the following command: 'AccessDatabaseEngine_x64.exe /passive'

    After these 2 steps I managed to run my application after building in x64 or AnyCPU build configuration. This appeared to solve my issue.

Note: The order of the steps seems to make a difference, so please follow accordingly.


  • I had the problem that I was switching from a 32bit application to 64bit and it did not run anymore. The second part of your instructions works perfectly! The /passive flag allows installation even with a 32bit Microsoft Office. - Freddy
  • Tip: Extract the AccessDatabaseEngine_x64.exe to a folder to get the AceRedist.msi and a Data.cab files. Open cmd prompt in Admin mode and execute the AceRedist.msi /passive. - Jeremy Thompson
  • Thanks a lot. The first option worked for me. I remember how much hassle I was facing to uninstall 32 bit Office & only after installing 64 bit office this issue was getting fixed earlier. But this 64 bit office component done the magic instead. - Biki

17

I installed the MS drivers and it still didn't work for me. Then I found this blog post that solved the issue. Read it there, else use these two images (linked from that post) as the TLDR sumamary:

enter image description here

enter image description here


  • This was the only thing that worked for me as well. - myroslav
  • Was about to post this as my contribution. This was my problem. I'd change this IIS setting yesterday since one project in my solution was x86 compiled, so I'm assuming it will class the entire program as 32-bit. - Lee
  • My server is running @64bits but the MS Office Components installed is 32bits. This solved my issue. Thank you. - MarceloBarbosa
  • What a incredible difficult thing to get working :(, I wonder if you could script this in powershell and just integrate it into some sort of automated server setup script? - David Rogers
  • @DavidRogers probably, but I'm not an expert in PS, so don't look to me for that! ;-) - Shaul Behr

13

For all those still affected by this.

I've been getting the error...

OLEDB error "The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine."

...as described by the OP, Shailesh Sahu.

I have 64bit Windows 7.

My problem is within PowerShell scripts, but is using a connection string, similar to the OP's post, so hopefully my findings can be applied to C#, PowerShell and any other language relying on the "Microsoft.ACE.OLEDB" driver.

I followed instructions on this MS forum thread: http://goo.gl/h73RmI

I first tried installing the 64bit version, then installing the 32bit version of the AccessDatabaseEngine.exe from this page http://www.microsoft.com/en-us/download/details.aspx?id=13255

But still no joy.

I then ran the code below in PowerShell (from SQL Panda's site http://goo.gl/A3Hu96)

(New-Object system.data.oledb.oledbenumerator).GetElements() | select SOURCES_NAME, SOURCES_DESCRIPTION 

...which gave me this result (I've removed other data sources for brevity)...

SOURCES_NAME              SOURCES_DESCRIPTION                                                                       
------------              -------------------                                                                       
Microsoft.ACE.OLEDB.15.0  Microsoft Office 15.0 Access Database Engine OLE DB Provider

As you can see, I have Microsoft.ACE.OLEDB.15.0 (fifteen) not Microsoft.ACE.OLEDB.12.0 (twelve)

So, I amended my connection string to 15 and it worked.

So, a quick PowerShell snippet to demonstrate how to soft-code the version...

$AceVersion = ((New-Object System.Data.OleDb.OleDbEnumerator).GetElements() | Where-Object { $_.SOURCES_NAME -like "Microsoft.ACE.OLEDB*" } | Sort-Object SOURCES_NAME -Descending | Select-Object -First 1 SOURCES_NAME).SOURCES_NAME

$connString = "Provider=$AceVersion;Data Source=`"$filepath`";Extended Properties=`"Excel 12.0 Xml;HDR=NO`";"

amended to pick the latest ACE version, if more than one

Hopefully, anyone finding this can now check to see what OLEDB version is installed and use the appropriate version number.


  • Hi, I'm trying to read Excel sheets with PowerShell. Excel files stored in a SharePoint document library and there is no Excel installation on the server. I have windows server 2008 R2. I installed Office System Driver: Data Connectivity Components however when I run your query can not see Microsoft.ACE.OLEDB. Do you have an idea about that? and any suggestion? Thanks in advance. - doganak
  • I found the answer. I had asked to our system administrator to install MS Access Database Engine. He had installed x86 version. When I run the query in PowerShell x86 again I saw ACE.OLEDB. - doganak
  • Awesome PowerShell code. I had the 32-bit version (which didn't show up in the PowerShell list), which prevented me from installing the 64-bit one. Once I removed the 32-bit version, I was able to install the 64-bit version without the "you already have 32-bit Office components..." message. The 64-bit version did show up in the PowerShell list, and my app started working. - Doppelganger

13

If you're using 64-bit but still having problem even after installing AccessDatabaseEngine, see this post, it solved the problem for me.

i.e. You need to install this AccessDatabaseEngine


5

You need to change the Solution Platform from "Any CPU" to "x86" or "x64" based on the bitness of office installation.

The steps are given below:

  1. Right click on the Solution File in Solution Explorer: enter image description here

    1. Click on the Configuration Manager.
    2. Click on the Active Platform Drop down, if x86 is already there then select that, else click on New. enter image description here

    3. Select x86 or x64 from the new platform dropdown: enter image description here

Compile and run your application.


4

If the installed "AccessDatabaseEngine" still does not help, below is solution:

You need to change the Active Solution Platform from "Any CPU" to "x86".

OLEDB Provider is Not Registered on the Local Machine

From CodeProject.com


  • You can run it under ANY platform, NOT ONLY 'x86', but as 'Any CPU' as 'x64' as well. See full answer below: stackoverflow.com/a/32760211/3637582 - Merav Kochavi

3

syp_dino,

The solution for me as you suggested for the "Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine" error is to change the Active Solution Platform from "Any CPU" to "x86".

When I performed those steps, rebuilt the solution, grabbed the EXE and placed in on the network, everything worked smoothly on the Windows 7 64 bit machine.



3

I was able to fix this by following the steps in this article: http://www.mikesdotnetting.com/article/280/solved-the-microsoft-ace-oledb-12-0-provider-is-not-registered-on-the-local-machine

The key point for me was this:

When debugging with IIS,

by default, Visual Studio uses the 32-bit version. You can change this from within Visual Studio by going to Tools » Options » Projects And Solutions » Web Projects » General, and choosing

"Use the 64 bit version of IIS Express for websites and projects"

After checking that option, then setting the platform target of my project back to "Any CPU" (i had set it to x86 somewhere in the troubleshooting process), i was able to overcome the error.


  • Thank you, most other answers are for going down to 32 bit, but this helps you move forward to 64 bit. - illinoistim

3

If you are debugging a web project, just make sure IIS Express is running either in 32 or 64 bits depending on your project settings.

Goto

Tools > Options > Projects and Solutions > Web Projects

and from there check (or uncheck) the 'Use 64 bit version of IIS Express...'


  • Wow a lot of hours tryng other solutions, only your fix it! thanks - Hernaldo Gonzalez

3

I had this issue when attempting to import data from an excel file (xlsx) into a SQL Server DB using SSMS 2014.

The 2007 Office System Driver: Data Connectivity Components install did the trick for me.


2

I have similar issue when we are reading Excel file.

History of the problem:

We recently migrated our application from 32-bit to 64-bit because of the memory requirement. For that we migrated our windows 7 from 32-bit to 64-bit. But still we installed 32-bit office on our machines.

because, of this we had this issue while importing Excel data into application.

Solution,

I downloaded 64-bit version of the http://www.microsoft.com/en-us/download/details.aspx?id=13255 and installed with argument as,

AccessDatabaseEngine_x64.exe /passive

Without any code change my issue get resolved.

Note:

On 64-bit OS and 64-bit office, my functionality was working fine without this fix. This fix is only required while our application is 64-bit running on 64-bit OS which is having 32-bit office installed on it.


  • But, Microsoft is against this solution. Few of my clients observe distortion in other Office programs because of this fix. - Rahul Techie

2

Just download & install the following Access DB engine (X86 or X64: as per your machine configuration) and see the magic :)

https://www.microsoft.com/en-us/download/confirmation.aspx?id=13255


2

First verify which version of microsoft.ace.oledb.12.0 is installed in your system.

Check in below path C:\Program Files\Common Files\Microsoft Shared\OFFICE14\ACEOLEDB.DLL --64 bit is installed

Check in below path C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE14\ACEOLEDB.DLL --x86 bit is installed

If (x86) is installed then using configuration manager change solution platform to x86, for x64 change to x64.

If not available then install using below link

https://www.microsoft.com/en-us/download/details.aspx?id=23734


1

I followed the instructions set out by others; installing this patch, installing that patch as well as the Microsoft Access Database Engine 2010.

My issue was that I'm using the same library (linq2sql) in 2 sites on my machine; 1 works and 1 doesn't.

Eventually I found that I had to "enable 32 bit applications" in the advanced settings of the apppool for my non-working site.

Everything works fine now.


1

also can try these steps

In the SQL Server, 1.Open one data base 2.Clic in the option 'Server Obtect' 3.Clic in 'Linked Servers' 4.Clic in 'Providers' 5.Clic Rigth in 'Microsoft.ACE.OLEDB.12.0' 6.Uncheck all the options and close


1

Remember to install AccessDatabaseEngine on server for web application.


1

I had the same issue but in this case microsoft-ace-oledb-12-0-provider was already installed on my machine and working fine for other application developed.

The difference between those application and the one with I had the problem was the Old Applications were running on "Local IIS" whereas the one with error was on "IIS Express(running from Visual Studio"). So what I did was-

  1. Right Click on Project Name.
  2. Go to Properties
  3. Go to Web Tab on the right.
  4. Under Servers select Local IIS and click on Create Virtual Directory button.
  5. Run the application again and it worked.


1

I had Microsoft Access Database Engine 2010 Redistributable already installed on my machine but was still receiving the Microsoft ACE OLEDB Provider error.

Then I recalled that I had upgraded to Office 2016 recently, so, may be I should try reinstalling Microsoft Access Database Engine 2010 Redistributable. And that fixed the problem on my machine.

So, if you have upgraded to different version of MS Office or even repaired/reinstalled your MS Office then try reinstalling Microsoft Access Database Engine 2010 Redistributable before wasting time with finding other fixes. Good luck!


1

1.) Verify your connection string with ConnectionStrings.com.

2.) Make sure you have the correct database engine installed. These were the two database engines that helped me.

Microsoft Access Database Engine 2010 Redistributable

2007 Office System Driver: Data Connectivity Components

3.) There could be an issue with your build target platform being "Any CPU", it may need to be "X86" (Properties, Build, Platform Target).


  • You can run it under ANY platform, NOT ONLY 'x86', but as 'Any CPU' as 'x64' as well. See full answer below: stackoverflow.com/a/32760211/3637582 - Merav Kochavi
  • Ok, well I don't think that was the case for me... so it's still worth mentioning that someone's build target platform may be part of the issue. - u8it

1

If you get this error when trying to use ACE from an ASP.NET application, the most likely cause is that you have installed either one of the 32-bit versions. By default, IIS on a 64-bit operating system will run applications in a 64-bit worker process. 64-bit processes cannot load 32-bit DLLs. When a call is made to the ACE provider, the 64 bit process will attempt to locate a 64-bit DLL. If it doesn't exist, you get the error message that brought you here.

In this case you have two options. First, you can install the 2010 64-bit version. If you have the 2007 32-bit version installed, you can simply install the 2010 64-bit version alongside it. If you have the 32-bit version of 2010 installed, you need to uninstall it and download and install the 64-bit 2010 version instead. You cannot have both the 32- and 64-bit versions of the 2010 provider installed at the same time. If you are performing the installation on your development machine, you may also be constrained by the bit-ness of any existing Office installations.

The second option is to change the application pool in IIS to enable 32-bit applications. If you are using the full version of IIS, you can use the management tool to do this (Control Panel » Administrative Tools » Internet Information Services (IIS) Manager).

For more understanding please refer below link


1

I faced this same problem. Go to the Solution Properties and change Any CPU to x86, I think it will do the job.


0

It depends with the office you have installed, if you have x64 bit office then you must compile the application as a x64 to allow it to run, so if you want it to run on x36 then you must install office x86 to accept, i tried all the solutions above but none worked until when i realised i had office x64bit and so i built the application as x64 and worked


  • Incorrect, I have Office installed and had to install the DB Connector regardless. - cybermonkey
  • This solves my problem when NONE of the above works for me! - sam byte

0

  • I've been facing the same issue for days. I did installed OLEDB drivers for 64 bit, tried out 32 bit also which are available at microsoft website.
  • I tried to reinstall office 64bit version also somehow it didn't work. Tried Allowing 32bit application in IIS pool true.
  • Tried Changing project environment to X86, AnyMachine, Mixed. And almost tried all the patch that i could find on internet. But all solution disappointed me.
  • Although i finally came to know that the provider which we were downloading was latest and was not working with it either.
  • I uninstalled it and installed oledb drivers 14.0.7015.1000 .I dont have the link for it as i got it from company resources , you might have to google it but it works. I came on this DOWNLOAD LINK of microsoft and it worked too... however it is version 14.0.6119.5000 but it worked.


0

I received this error when importing data from an Excel file into MS-SQL. The provider was already installed (64-bit) and this surprised me why it didn't work. So all I did was locate the Import/Export application used here i.e. the .EXE. And I found it at

C:\Program Files\Microsoft SQL Server\130\DTS\Binn\DTSWizard.exe

I then ran the .exe directly to perform the data import. And it worked!


0

The way I solved it on different computers:

I have a Windows 7 32bit machine with Visual Studio 2012 which did not have the Access Database because I do not have the Office 2010. I copied the same source I had in my Windows 7 64bit machine.

So, I installed the AccessDatabaseEngine into this Windows 7 32 bit machine after downloading it per above suggestions from others here and everything worked fine.

I still had the problem on my Windows 7 64 bit machine which already has Office 2010 that already includes Access 2010. The way I solved on this computer was by going into the PROJECT, selected Properties, and at Platform target had Any CPU I checked Prefer 32-bit. Recompiled/Build and the Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine message was gone.


  • Apparently, the Office I bought installs by default as for 32bit unless you buy Office for 64 bit machines, I am not an expert on this but that is my guess - I will find out more if this is true. If I am going to use it with 64 bit full potential then I have to download the AccessDatabaseEngine 64bit version as suggested by others above. For now since what I had is the 32 bit engine I had to make my application prefer 32bit CPU. - Humbert

0

This worked for me right now.

  1. Visit this page then download that appropriated package for your computer (AccessDatabaseEngine.exe or AccessDatabaseEngine_X64.exe)
  2. Install that.
  3. Enjoye... Your codes is work now...

But for your application package you can use of any the following solutions:

  1. Go in "C:\Program Files (x86)\Common Files\microsoft shared" or "C:\Program Files\Common Files\Microsoft Shared" and put the "OFFICE14" directory in the same location of your package file.

Or

  1. Attach two projects (in item1) in your installation package.

Linked


Related

Latest