为什么OleDbDataAdapter.Fill()非常慢?
我正试图build立一个应用程序,将读取一个Excel文件(.xlsx,.xls)。 不幸的是,OleDbDataAdapter.Fill()的性能出乎意料的糟糕。 我花了2分钟时间从文件中读取一条logging。
有关该文件的更多信息:
- 大小 – 257MB
- 专栏 – 104
- 行数 – 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)的漫步。