C#调用OleDbConnection类读取Excel表格时,报错外部组件发生异常!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#调用OleDbConnection类读取Excel表格时,报错外部组件发生异常!相关的知识,希望对你有一定的参考价值。

跪求大神指导,谢谢!没有多少就给10分吧!谢谢了

参考技术A //动态读取Excel表数据到DataSet
DataSet excelDataSet = new DataSet();
using (OleDbConnection con = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=BOM.xlsx;Extended Properties='Excel 12.0;IMEX=1';"))

    con.Open();
    DataTable dt = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
    using (OleDbCommand cmd = new OleDbCommand("", con))
    
        Console.WriteLine("read excel............");
        foreach (DataRow item in dt.Rows)
        
            string tableName = item["TABLE_NAME"].ToString();
            cmd.CommandText = string.Format("select * from [0] ", tableName);
            DataTable temp = new DataTable(tableName);
            temp.Load(cmd.ExecuteReader());
            excelDataSet.Tables.Add(temp);
        
        Console.WriteLine("read excel done !");
    

参考技术B 问题出在Excel中左下角的Sheet1追问

您好,谢谢您的回答,但是我的Excel是正确的都对!左下角的文件名确实是Sheet1

追答

你把除了Sheet1之外的都删掉.然后保存关闭.再打开任务管理器看看.里面有没有EXCEL.exe进程.有的话就结束它.再导入.

追问

您好,还是不行啊!我记得以前好使的功能,好长时间没用了,今天突然导入的功能就不好使了,我排查了一下就是报“外部组件发生异常”,其他的也没有了,应该跟Excel没有关系!

追答

原来好使现在不好使?

你office是不是重装了?  现在的office是什么版本的?

    系统换了

    office换了

    dotnet版本换了

这些你都确定一下.

 

应该不是你代码的事,如果路径错了.在open的时候就报错了.

你先手动创建一个空的excel,导入,看看代码能不能做过你报错那一行

本回答被提问者采纳

ACCESS通过一个连接写入的数据,还有一个连接却读取不出来

近期在用c#实现一个数据导入的功能,将一个ACCESS数据库中的数据导入到还有一个ACCESS的数据库中,然后显示出来,可是导入成功了。却显示不出来。

经过研究认为应该是缓存的原因,因为我写入数据和读取数据使用的不是一个OleDbConnection对象。而是分别打开了两个OleDbConnection连接对象;一个连接写入成功了,但保存到磁盘还须要点时间。所以这个连接写入成功。还有一个连接马上去取就会有取不到的情况!

改为使用一个连接对象。问题就攻克了。

以上是关于C#调用OleDbConnection类读取Excel表格时,报错外部组件发生异常!的主要内容,如果未能解决你的问题,请参考以下文章

通过 OleDbConnection 获取单个记录的最佳方法是啥?

C# oledbconnection 更新不起作用

用Access作为后台数据库支撑,书写一个用C#写入记录的案例

ACCESS通过一个连接写入的数据,还有一个连接却读取不出来

c#如何实现串口通信读取数据

将 OleDbConnection 刷新到 Access DB - 最佳实践