[Fixed] The ‘Microsoft.ACE.OLEDB.12.0’ provider is not registered on the local machine

By | June 20, 2014

Advertisement from Google

The problem arises when you have your application compiled for AnyCPU Platform, you are running on a 64bit system and the installed ADO.NET provider (Microsoft ACE.OLEDB.12.0) is the 32bit version.

When using the AnyCpu target Platform your code will be executed as 64bit code on 64bit systems and as 32bit code on 32bit systems. An application executed as 64bit cannot use 32bit drivers (and viceversa). The Microsoft.ACE.OLEDB.12.0 has two different version for 64 and 32bit that cannot be installed together on the same machine.

The simplest workaround is to change the Target Platform of your application through Visual Studio menu

BUILD > Configuration > Active > Solution > Platform > x86

If the x86 option is not already there, then select NEW, name it x86Copy Settings from AnyCPUand check Create new project platforms

Advertisement from Google

If you think that using a 32bit app on a 64bit Operating System is a loss of performance or something to be avoided then think twice and read this reference where the PRO and CONS of AnyCpu are critically examined. If you don’t have a specific reason to use AnyCpu it is better to stay with x86.

Of course, another option is to deinstall the 32bit version and install the 64bit version of ACE from hereand then run you application as AnyCpu on 64bit systems. But this could be a nightmare for your deployment scenarios. What about 32bit machine? What if Microsoft Office 32bit version is installed on your x64 target machine? Office installs its bit compatible version of ACE and, of course, it is not possible to have 32bit and 64bit of ACE installed on the same machine.
Now you should also ask your customer to reinstall Office as 64bit to keep your 64bit app happy.

(с) Steve

Original at stackoverflow

Русская версия

9 thoughts on “[Fixed] The ‘Microsoft.ACE.OLEDB.12.0’ provider is not registered on the local machine

  1. Dan

    Great post. Best explanation of the problem and the fix options that I was able to find on my couple of days research. Many of the fixes recommended installing patches and updates to Access, however never explained the why and the cost benefit. In addition the “fix” lead to a nightmare of new problems. Had to go to a current restore point to resolve the fix. Your explanation and fix instructions resolved the issue with a couple of settings. Thanks.

  2. Rob Wood

    YES – Brilliant! After lots of searching, this is the simple answer requiring one minor setting change. Thanks!


    i used the same thing which you have suggested i.e. x86 platform is selected in vb.net is but my error is not fix
    i am working on windows 8.1 which is 64 bit operating system i have installed 2010 access database engind(32bit) and also install access dataabae engind 2007. It works fine with ms access file but it does not work with excel file while reading excel file through vb. i get error that microsoft.ace.12.0 is not installed in local machine please guide me how to resolve it. My code is as follows
    Imports System.Data.OleDb
    Imports System.Data.Odbc
    Imports excel = Microsoft.Office.Interop.Excel
    Imports Microsoft.Office.Core
    Public Class Form1
    Dim cn As System.Data.OleDb.OleDbConnection
    Dim cn1 As OleDb.OleDbConnection
    Dim cmd As OleDb.OleDbCommand
    Dim ds1 As New DataSet
    Dim ds2 As New DataSet
    Dim filename As String
    Dim da As System.Data.OleDb.OleDbDataAdapter

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Me.WindowState = FormWindowState.Maximized

    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    cn = New OleDb.OleDbConnection(“PROVIDER=MICROSOFT.ACE.OLEDB 12.0;” & “DATASOURCE= ” & TextBox1.Text & “;” & “EXTENDED PROPERTIES=EXCEL 12.0;”)
    cmd = New OleDb.OleDbCommand(“SELECT * FROM [sheet1$]”, cn)
    da = New OleDb.OleDbDataAdapter(cmd)
    da.Fill(ds1, “sheet1$”)

    DataGridView1.DataSource = ds1
    ‘Catch EX As Exception
    ‘ MessageBox.Show(EX.ToString)
    ‘ End Try
    End Sub
    End Class

    thanks in advance


Leave a Reply

Your email address will not be published. Required fields are marked *