'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine
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.
Well, you need to install it. You're looking for:
Read more... Read less...
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:
If you use the download from the accepted answer, you will need to build for x86, as pointed out by @backtestbroker.com.
depending on the app(32/64bit) using the connection you could just install
- Access 2007 engines (only 32bit)
- Access 2010 (32&64bit)
- Access 2013 full runtime (32&64bit ! >200mb)
- Access 2016 runtime
- Access 2019 runtime
- 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)6
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
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
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:
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.
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.
- First download the file locally You can download the installation here: http://www.microsoft.com/en-us/download/details.aspx?id=13255
- 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 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.