“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 Access 数据库引擎 2010 可再发行组件
或
2007 Office 系统驱动程序:数据连接组件
安装它们,它应该可以工作。
当我的项目在 64 位上运行时,我遇到了更严重的问题,但我安装了 32 位版本。你可以检查这个问题:OleDbConnection.Open() 只在一个项目中抛出异常,相同的代码在其他项目中工作。您应该在另一个问题中找到解决此问题所需的一切。