“Microsoft.ACE.OLEDB.12.0”提供程序未在本地计算机上注册,不适用于 Excel,但适用于 Acc

本文关键字:适用于 注册 计算机 不适用 Acc Excel OLEDB ACE Microsoft 程序 | 更新日期: 2023-09-27 18:36:56

我在解决方案中的两个地方使用了OledbConnection,一个读取Access,另一个读取Excel。读取 Access 的提供程序很好,但读取 excel 的提供程序给我错误 - "Microsoft.ACE.OLEDB.12.0"提供程序未在本地计算机上注册。

这是我读取 Excel 并返回数据表的方法。

string CONSTRSTRING = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=<FILENAME>;Extended Properties='"Excel 12.0;HDR=Yes;IMEX=1'";";
using (OleDbConnection objConnection = new OleDbConnection(CONSTRSTRING.Replace("<FILENAME>", fullFileName)))
{
    DataSet dsImport = new DataSet();
    try
    {
        objConnection.Open();
        DataTable dtSchema = objConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
        if ((null == dtSchema) || (dtSchema.Rows.Count <= 0))
        {
            throw new Exception("Excel doesn't contain any readable table/tab");
        }
        new OleDbDataAdapter("SELECT * FROM [" + sheetName + "]", objConnection).Fill(dsImport);
    }
    catch (Exception ex)
    {
        throw ex;
    }
    finally
    {
        objConnection.Close();
    }
    return dsImport.Tables[0];
}

另一件事是,如果我从 VS 调试运行代码,它可以工作,但在从 IIS 运行时它不起作用。这只发生在这个代码上,另一个用于连接访问的代码工作正常。

附言阅读访问:

try
{
    string sAccessConnection = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filename + ";Persist Security Info=False;";
    using (System.Data.OleDb.OleDbConnection con = new System.Data.OleDb.OleDbConnection(sAccessConnection))
    {
        con.Open();
        //doing stuffs
        con.Close();
    }
}
catch (Exception ex)
{
    throw ex;
}

编辑不,它在那里没有答案。那里说如何注册Microsoft.ACE.OLEDB.12.0。我的解决方案使其适用于 Access(这意味着它已注册),但不适用于 Excel 文件。问题是为什么 Excel 和 Acce 不同?

而且,如果我安装 x64 访问驱动程序,我会得到以下要求

Retrieving the COM class factory for component with CLSID {73A4C9C1-D68D-11D0-98BF-00A0C90DC8D9} failed due to the following error: 80070005 Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)).

“Microsoft.ACE.OLEDB.12.0”提供程序未在本地计算机上注册,不适用于 Excel,但适用于 Acc

对于这种情况,有两个众所周知的修复:

Microsoft Access 数据库引擎 2010 可再发行组件

2007 Office 系统驱动程序:数据连接组件

安装它们,它应该可以工作。

当我的项目在 64 位上运行时,我遇到了更严重的问题,但我安装了 32 位版本。你可以检查这个问题:OleDbConnection.Open() 只在一个项目中抛出异常,相同的代码在其他项目中工作。您应该在另一个问题中找到解决此问题所需的一切。