Mr_ALong 2022-07-30 22:21 采纳率: 77.8%
浏览 44
已结题

C#使用Oledb读取Excel数据的时候,总是读取不到数据

使用Oledb读取Excel数据的时候,总是读取不到数据 !而打开源文件另存一下就可以读取到,这是什么问题?Excel是xlsx文件
public static DataTable DBExcelToDataTable(string pathName, string sheetName = "")
    {
        System.Data.DataTable dt = new System.Data.DataTable();
        string ConnectionString = string.Empty;
        FileInfo file = new FileInfo(pathName);
        if (!file.Exists) { throw new Exception("文件不存在"); }
        string extension = file.Extension;
        switch (extension)                          // 连接字符串
        {
            case ".xls":
                ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathName + ";Extended Properties='Excel 8.0;HDR=no;IMEX=1;'";
                break;
            case ".xlsx":
                ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + pathName + ";Extended Properties='Excel 12.0;HDR=no;IMEX=1;'";
                break;
            default:
                ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathName + ";Extended Properties='Excel 8.0;HDR=no;IMEX=1;'";
                break;
        }
        System.Data.OleDb.OleDbConnection con = new System.Data.OleDb.OleDbConnection(ConnectionString);
        try
        {
            con.Open();
            if (sheetName != "") //若指定了工作表名
            {
                System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand("select * from [" + sheetName + "$] ", con);
                System.Data.OleDb.OleDbDataAdapter apt = new System.Data.OleDb.OleDbDataAdapter(cmd);
                try
                {
                    apt.Fill(dt);
                }
                catch (Exception ex) { throw new Exception("该Excel文件中未找到指定工作表名," + ex.Message); }
                dt.TableName = sheetName;
            }
            else
            {
                //默认读取第一个有数据的工作表
                var tables = con.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { });
                if (tables.Rows.Count == 0)
                { throw new Exception("Excel必须包含一个表"); }
                foreach (System.Data.DataRow row in tables.Rows)
                {
                    string strSheetTableName = row["TABLE_NAME"].ToString();
                    //过滤无效SheetName   
                    if (strSheetTableName.Contains("$") && strSheetTableName.Replace("'", "").EndsWith("$"))
                    {
                        System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand("select * from [" + strSheetTableName + "]", con);
                        System.Data.OleDb.OleDbDataAdapter apt = new System.Data.OleDb.OleDbDataAdapter(cmd);
                        apt.Fill(dt);
                        dt.TableName = strSheetTableName.Replace("$", "").Replace("'", "");
                        break;
                    }
                }
            }
            return dt;
        }
        catch (Exception ee)
        { throw ee; }
        finally
        { con.Close(); }
    }

img

img

这是Excel中的文件和DataTable获取的数据

我打开Excel文件只需要保存一下,就可以读取到数据!

img

Excel文件是通过 HttpPostedFile 中的SaveAs上传上的,我不知道是否跟这个有关系

求解答!
  • 写回答

2条回答 默认 最新

  • IT技术分享社区 数据库领域优质创作者 2022-07-30 23:13
    关注

    首先文件要下载到本地,然后才可以进行读取

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 8月8日
  • 已采纳回答 7月31日
  • 创建了问题 7月30日

悬赏问题

  • ¥15 对于这个问题的解释说明
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败
  • ¥20 java在应用程序里获取不到扬声器设备
  • ¥15 echarts动画效果的问题,请帮我添加一个动画。不要机器人回答。