Monday, February 14, 2011

Solution: The 'Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine

Today, after I uploaded one of my ETL data integration components (written in C#) from local 32-bit Windows System to our server environment which is running on Windows 2008 R2 64-bit system, my application blew up with the following error message:

The 'Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine.

The reason for this error is, I used Jet database engine in my ETL component to read Excel file, but the Jet library was not designed for 64-bit system. The community has been suggesting to compile the code to target to x86 platform in order to cope with this issue, which is something I was reluctant to do for the obvious reasons. It's also the primary motivation that I am blogging about this issue.

Further Google search indicates that Microsoft has released a 64-bit compatible Jet database engine last year. The following is the procedure that you may use to fix this issue if you have:

  1. Download Microsoft Access Database Engine 2010 Redistributable (of course you'll need to choose the right bit for your server), and install it on your server

  2. Change your connection string in your code or configuration file from
    Provider=Microsoft.Jet.OLEDB.4.0;
    to
    Provider=Microsoft.ACE.OLEDB.12.0;
UPDATE: Microsoft has released a service pack for the Database Engine which is available at  http://www.microsoft.com/en-us/download/details.aspx?id=26605.

After I have done the above, my ETL component worked fine on the 64-bit system.

Hope this helps if you ever run into this issue.

10 comments:

  1. Hi,
    I use MS Access as a backend for my application which works in 32 bit and not in 64bit OS.

    I had the same problem "The 'Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine." and i have changed the connection string as you have changed.

    I have installed the Microsoft Access Database Engine 2010 too.

    It works fine when i use select statements but throws error while i use insert, update and delete statements.

    Please help me on this to get it done for Insert, Update and delete statements too.

    Thanks in Advance

    DS

    ReplyDelete
  2. @DS, there is no reason that you should receive the error if your code worked previously. Maybe you can post your connection string here so I can have a look. Also I would check the file system permission in your case.

    ReplyDelete
  3. thanks, i change my strig and it´s working!!!
    The conection into the vb will be change too.
    This option exist.
    You dont need install "Microsoft Access Database Engine 2010"
    Thanks
    Fanan

    ReplyDelete
  4. plz can any one tell me how to change the string......... ???

    ReplyDelete
  5. Hi sainath, you can use any text editing tool to change the connection string in your application's config file. The file name of the config file is different from application to application. For web application, it's web.config. For Windows form application, it's (YourAppName).exe.config. They are basically xml files.

    ReplyDelete
  6. Hi Everybody,
    I just backed here to add my solution that really worked for me:
    My project had been setup to works with DotNet Framework 2.0,
    So I changed form DotNet framework 2.0 ---> Dotnet framework 4.0
    and then I changed from Dotnet frmaework 4.0 ---> DotNet framework 2.0
    This solution works great to me,
    Regards,

    ReplyDelete
  7. If you are trying to read an excel file using oledb in Web appln( win 2008 R2, VS 2010), then there is one more thing that need to be done.

    make following changes to IIS:
    App pool--> Advance Setting -->Enable 32-bit applications = true

    This worked for me.

    ReplyDelete
  8. Hi,
    I have created an application to import Tags into oracle db from Excel file and its working fine in windows XP but when i tries to import in Windows Server 2008 R2(64 bit OS),Iam getting error as 'Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine'. Can anyone please help me on this issue.

    Thanks,
    Raju

    ReplyDelete
  9. Thank you so much for posting this. I've been beating my head against this problem for days and this finally fixed it for me. Switching the provider to the ACE version cleared up the Excel import issue I had been having when the package was deployed (switching to Run64BitRuntime = "False" worked fine in dev, but did nothing once deployed).

    ReplyDelete
  10. Daniel Cai

    Here is a LINQ Provider for MS Access:
    https://www.kellermansoftware.com/p-47-net-data-access-layer.aspx

    ReplyDelete