Microsoft.Jet.OLEDB.4.0 未注册! 野峰

一段简单的访问 Access 数据库的测试代码:

using System;
using System.Data.OleDb;
public class DbTest
{
    public static void Main()
    {
        string cnstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db1.mdb";
        OleDbConnection cn = null;
 
        try
        {
            cn = new OleDbConnection(cnstr);
            cn.Open();
            Console.WriteLine("Database opened.");
        }
        catch (Exception exp)
        {
            Console.WriteLine(exp.Message);
        }
        finally
        {
            if (cn != null) { cn.Dispose(); }
        }
    }
}

在朋友的机器上通不过,显示Microsoft.Jet.OLEDB.4.0 未注册!
折腾半天,问题出在 x86 or x64 上!我的机器是32位系统,朋友的机器是64位系统。Microsoft Office 2003 的 Microsoft.Jet.OLEDB.4.0 和 Office 2007 的 Microsoft.ACE.OLEDB.12.0 都不支持64位!

在MSDN上搜索一下,遇到这个问题的还真不少!

解决方案(两者均可):

1、将上面的代码编译为32位代码
命令行开关指定 /platform:x86

csc /platform:x86 DbTest.cs

注:对于 Visual Studio 中的项目,打开项目的属性页,在 生成 页,指定 目标平台 为 x86。

2、安装64位的 ACE OLEDB Provider
微软为 Office 2010 提供的 Access Database Engine 有 64 位版本,下载地址如下:
http://www.microsoft.com/en-us/download/details.aspx?id=13255

注:如果机器上已经安装有32位的 Office 2010,则安装 64 位的 Access Database Engine 时,需要指定 /passive 选项,如下:
AccessDatabaseEngine_X64.exe /passive

连接字符串(ConnectionString)的写法

1、对于 Office 2000-2003 的数据库引擎
string cnstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db1.mdb;";

2、对于 Office 2007 的数据库引擎
string cnstr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=db1.mdb;";

3、对于 Office 2010 的数据库引擎
string cnstr = "Provider=Microsoft.ACE.OLEDB.14.0;Data Source=db1.mdb;";

Access Database Engine(主要是 ACE OLEDB Provider)不仅用于访问 Access 数据库,也可以用于访问 Excel 文件。


原文地址:https://www.cnblogs.com/prowyh/p/2793824.html