sql导入未在本地计算机上注册表,未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序报错的解决办法...

当使用.NET项目通过microsoft.ACE.oledb读取Excel时,出现'未在本地计算机上注册“microsoft.ACE.oledb.12.0”'的错误。原因可能包括缺失数据访问组件、未安装相应Office版本、IIS应用程序池配置不当或连接字符串错误。解决方案包括安装Access Database Engine组件,设置IIS应用程序池为32位兼容,并检查连接字符串是否正确。无需安装完整Office即可使用此方法。

错误描述:

在开发.net项目中,通过microsoft.ACE.oledb读取excel文件信息时,报错:

“未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序”

代码示例:

static void Main(string[] args)

{

readexcel("D:\\test\\xlsxtest.xlsx");

}

public static void readexcel(string _path)

{

DataTable dt = new DataTable();

string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + _path + ";" + "Extended Properties=\"Excel 12.0;HDR=No\"";

using (OleDbConnection connection = new OleDbConnection(connectionString))

{

string SQL = "select * from [sheet1$]";

try

{

OleDbCommand comm = new OleDbCommand(SQL, connection);

if (connection.State != ConnectionState.Open)

connection.Open();

OleDbDataAdapter Adpter = new OleDbDataAdapter(comm);

Adpter.Fill(dt);

}

catch (Exception ex)

{

dt = null;

}

finally

{

if (connection.State == ConnectionState.Open)

connection.Close();

}

foreach (DataRow item in dt.Rows)

{

string sds = item[0].ToString();

Console.WriteLine(item[0].ToString() + "//" + item[1].ToString() + "//" + item[2].ToString());

if (item[1].ToString() == string.Empty)

{

break;

}

}

Console.ReadKey();

}

}

报错原因:

主要有以下几种原因:

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、安装数据访问组件:

1)适用于office2007的

Microsoft Access Database Engine 2007 Office system 驱动程序:数据连接组件

https://www.microsoft.com/zh-cn/download/details.aspx?id=23734    (该链接已失效,直接用Microsoft Access Database Engine 2010 Redistributable就好了)

2)适用于office2010的

Microsoft Access Database Engine 2010 Redistributable

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

此下载将安装一组组件,非 Microsoft Office 应用程序可以使用它们从 2007/2010 Office system 文件中读取数据,例如从 Microsoft Office Access 2007/2010(mdb 和 accdb)文件以及 Microsoft Office Excel 2007/2010(xls、xlsx 和 xlsb)文件中读取数据。这些组件还支持与 Microsoft Windows SharePoint Services 和文本文件建立连接。

此外,还会安装 ODBC 和 OLEDB 驱动程序,供应用程序开发人员在开发与 Office 文件格式连接的应用程序时使用。

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

如图:

39a710aff145219994d0bdc5645be4b6.png

注意:

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

83ad680488d529009f701cdfa8e5af82.png

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

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

如果下载安装的是x86的,那么你的桌面程序就要选择x86发布,而web项目正常发布就好;

*总结:如果你是web项目,你就下载x86的,发布选anycpu就好了,然后设置应用程序池32位兼容就好了;

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

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

3、连接字符串

主要如下两种情况:

1)使用Office 2007 OLEDB驱动程序(ACE 12.0)连接到较旧的97-2003 Excel工作簿。

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\\myFolder\\myOldExcelFile.xls;

Extended Properties="Excel 8.0;HDR=YES";

“HDR =Yes;” 表示第一行包含列名,而不是数据。“HDR =No;” 表明相反;

2)读取xlsx格式的excel

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\\myFolder\\myExcel2007file.xlsx;

Extended Properties="Excel 12.0 Xml;HDR=YES";

“HDR =Yes;” 表示第一行包含列名,而不是数据。“HDR =No;” 表明相反;

Microsoft.ACE.OLEDB连接字符串参考地址:https://www.connectionstrings.com/ace-oledb-12-0/

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值