为什么OleDbDataAdapter.Fill()非常慢?

时间:2014-07-21 12:40:50

标签: c# asp.net excel oledbdataadapter

我正在尝试构建一个将读取excel文件(.xlsx,.xls)的应用程序。不幸的是,OleDbDataAdapter.Fill()的表现非常糟糕。我花了2分钟从文件中读取一条记录。

有关该文件的更多信息:

  1. 尺寸 - 257MB
  2. 专栏 - 104
  3. 行 - 1 000 000
  4. 我目前正在使用的代码来读取文件:

        string conStr = string.Empty;
        string strQuery = string.Empty;
        switch (extension)
        {
            case ".xls": //Excel 97-03
                conStr = @"Provider=Microsoft.Jet.OleDb.12.0;Data Source=" + file_source + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1;';";
                strQuery = "SELECT " + col_no + " * FROM [" + workbook + "] ";
                break;
    
            case ".xlsx": //Excel 07
                //connection string to connect to the xlsx file
                conStr = @"Provider=Microsoft.Ace.OleDb.12.0;Data Source=" + file_source + ";Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1;';";
                strQuery = "SELECT " + col_no + " * FROM [" + workbook + "] ";
                break;
        }
        DataTable tbl = new DataTable();
        OleDbDataAdapter ada = new OleDbDataAdapter(strQuery, conStr);
        ada.Fill(tbl);
        ada.Dispose();
    
        return tbl;
    

    非常感谢您的帮助!

    谢谢!

1 个答案:

答案 0 :(得分:3)

将大型数据集存储在Excel文件中是一个坏主意。在我看来,预计在2分钟内读取250MB的Excel文件。

我建议切换到任何数据库解决方案。但是,如果您无法更改数据存储,则可以尝试使用Excel COM对象(但它需要在服务器计算机上安装Excel)。 Here是Teddy Garland的漫步。