WithCoderWithCoderWithCoder

C# 未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序解决办法

    今天在使用C#访问Access数据库时,编译代码报错“未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序”。使用的代码如下(创建一个数据表):

        public void createTable(string fileName, string pwd)
        {
            try
            {
                string connStr = @"Provider= Microsoft.ACE.OLEDB.12.0;Jet OLEDB:DataBase Password=" + pwd + "; Data Source=" + fileName + ";";
                OleDbConnection oldDbConn = new OleDbConnection(connStr);
                oldDbConn.Open();
                OleDbCommand cmd = new OleDbCommand("create table tn_member(id Integer,name Text);", oldDbConn);
                cmd.ExecuteNonQuery();
                cmd.Dispose();
                oldDbConn.Close();
                oldDbConn.Dispose();
            }
            catch (Exception ex)
            {
            }
        }

    网上搜索了错误的原因,主要有以下几种:

        1、没有安装数据访问组件,需要安装相应版本的数据访问组件(AccessDatabaseEngine);

        2、没有安装相应版本的Office客户端,需要安装相应版本的Office客户端;

        3、没有在IIS应用程序池配置默认属性,需要在相应的IIS应用程序池启用32位应用程序;

        4、连接字符串的问题。采用Microsoft.Jet.OleDb.4.0,可以读取excel2007以前的版本,在客户机上不需要部署office,采用Microsoft.Ace.OleDb.12.0的时候,需要安装引擎。

        5、另外,在使用“Microsoft.Jet.OLEDB.4.0”,也会报类似错误,原因有可能是,Microsoft.Jet.OLEDB.4.0在64位系统上不支持,需要修改架构,从x64改为x86,无论是WinForm还是ASP.NET;或者修改连接字符串为Microsoft.ACE.OLEDB.12.0并且安装AccessDatabaseEngine x64数据访问组件;

    解决方法:

        1、安装数据访问组件, 例如,适用于office2010的 Microsoft Access Database Engine 2010 Redistributable

              https://www.microsoft.com/zh-CN/download/details.aspx?id=13255

        2、在IIS应用程序池中,设置“启用兼容32位应用程序”,此设置适用于web项目,如图:

            1-200Q315222E32.png

        3、如果是第5条对应的错误,则修改visual studio框架的编译版本,如图:

            1-200Q3152432B5.png

    注意:

    在下载Microsoft Access Database Engine 2010 Redistributable时会让选择下载x86的还是x64的,如图:

    1-200Q3160P2M8.png

    按照的前提是看服务器是x64的还是x86的,x64的服务器两个版本都能安装:

        如果下载安装的是x64的,那么桌面程序就要选择目标平台x64发布,而web项目是不兼容的,不管是如何发布的;

        如果下载安装的是x86的,那么桌面程序就要选择目标平台x86发布,而web项目选AnyCPU正常发布就可以;

    因此,如果是web项目,就下载x86的,发布选anycpu,然后设置应用程序池32位兼容就好了。

    最后说一句,用这个,是不需要安装office软件的。

欢迎分享交流,转载请注明出处:WithCoder » C# 未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序解决办法