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

我正试图build立一个应用程序,将读取一个Excel文件(.xlsx,.xls)。 不幸的是,OleDbDataAdapter.Fill()的性能出乎意料的糟糕。 我花了2分钟时间从文件中读取一条logging。

有关该文件的更多信息:

  1. 大小 – 257MB
  2. 专栏 – 104
  3. 行数 – 1 000 000

我目前使用的代码来读取文件:

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; 

你的帮助将不胜感激!

谢谢!

将大型数据集存储在Excel文件中是个不错的主意。 我认为在2分钟内读取250MB的Excel文件是可以的。

我build议切换到任何数据库解决scheme。 但是,如果你不能改变你的数据存储,你可以尝试使用Excel COM对象(它将需要在服务器上安装Excel)。 这里是泰迪·加兰(Teddy Garland)的漫步。