我有一个excel文件,我使用OleDB使用SQL在我的C#程序中查询它。 但我遇到了一个问题。我的文件有大约300K行,查询需要很长时间。我已经搜索过这个问题并使用了一些库,例如spreadsheetlight和EPPlus,但它们还没有查询功能。 任何人都可以建议我以最快的方式查询我的文件吗?
提前致谢。
答案 0 :(得分:1)
我使用过400-800K行的Excel文件。任务是读取所有行并将它们插入SQL Server DB。根据我的经验,OleDB无法及时处理这些大文件,因此我们不得不使用SQL Server方法直接将Excel文件导入到DB中,例如, OPENROWSET
甚至更小的文件,如260K行大约需要。使用Core2 Duo生成硬件,OleDB将一行一小时导入数据库表。
因此,在您的情况下,您可以考虑以下事项:
1.尝试使用范围SELECT
:
OleDbCommand date = new OleDbCommand("SELECT ["+date+"] FROM [Sheet1$A1:Z10000]
WHERE ["+key+"]= " + array[i].ToString(), connection);
注意,[Sheet1$A1:Z10000]
告诉OleDB只处理工作表的第1到第10行,而不是处理整个工作表。您可以使用此方法,例如,您的Excel文件已排序,并且您知道您不需要检查所有行,但仅限于今年。或者您可以动态更改Z10000
以读取文件的下一个块并将结果与前一个结合。
2.使用直接数据库导入将所有Excel文件内容直接导入数据库,例如MS SQL Server的OPENROWSET
,然后针对RDBMS而不是Excel文件运行搜索查询。
我个人建议选项#2。评论您是否可以使用DB以及可用的RDBMS产品/版本(如果有)。
希望这有帮助!