c#报错IErrorInfo.GetDescription 因 E_FAIL(0x80004005)排错几种思路

c#做excel读取到DataTable的时候,启动报错:
刚解决完“未在本地计算机注册Microsoft.ACE.oledb.12.0提供程序”以为调用可以成功了,结果又报这个错。
代码如下:

 public static DataTable ReadExcelToTable()//excel存放的路径
        {
            try
            {
                String path = System.Windows.Forms.Application.StartupPath + "\\lcdm.xlsx";
                //连接字符串
                string connstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties='Excel 8.0;HDR=NO;IMEX=1';"; // Office 07及以上版本 不能出现多余的空格 而且分号注意
                //string connstring = Provider=Microsoft.JET.OLEDB.4.0;Data Source=" + path + ";Extended Properties='Excel 8.0;HDR=NO;IMEX=1';"; //Office 07以下版本 
                using (OleDbConnection conn = new OleDbConnection(connstring))
                {
                    
                    conn.Open();
                    DataTable sheetsName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" }); //得到所有sheet的名字
                    string firstSheetName = sheetsName.Rows[0][2].ToString(); //得到第一个sheet的名字
                    string sql = string.Format("SELECT *  FROM  [{0}]", firstSheetName); //查询字符串
                   OleDbDataAdapter ada = new OleDbDataAdapter(sql, connstring);
                    DataSet set = new DataSet();
                    ada.Fill(set);
                    return set.Tables[0];
                }
            }
            catch (Exception er)
            {
                MessageBox.Show(er.Message.ToString());
                return null;
            }
        }

怎么看都不像有错,网上查了一些资料,情况无非两种:
1、文件被占用
2、关键字冲突
3、还有就是sheet名字后面加一个"$",
例如select * from [Sheet1$] ,
但是select * from [{0}]这样就不需要加$的。
4、还有一种就是拼接文件名,需要加“'”

new OleDbDataAdapter("SELECT * FROM " + fileName, sConnection);

这种应该改成

new OleDbDataAdapter("SELECT * FROM `" + fileName + "`", sConnection);

但是最后,发现笔者都不是以上问题。
最后,我想会不会是文件路径的问题啊,于是做调试,path去掉文件名字,必然报错!

 String path = System.Windows.Forms.Application.StartupPath ;

查看报错信息,路径果然不对,那个路径我没放文件,于是重新将文件防止对应的路径。
程序正常,解决问题了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值