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日

悬赏问题

  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因