Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C查询excel最快的方法_C#_Sql_Database_Excel_Oledb - Fatal编程技术网

C# C查询excel最快的方法

C# C查询excel最快的方法,c#,sql,database,excel,oledb,C#,Sql,Database,Excel,Oledb,我有一个excel文件,我正在用OleDB用SQL在我的C程序上查询它。 但我面临一个问题。我的文件大约有30万行,查询时间太长。我在谷歌上搜索了这个问题,并使用了一些库,如spreadsheetlight和EPPlus,但它们没有查询功能。 有人能给我建议查询我的文件的最快方法吗 提前感谢。我使用了400-800K行Excel文件。任务是读取所有行并将它们插入SQLServerDB。根据我的经验,OleDB无法及时处理如此大的文件,因此我们不得不使用SQL Server方法将Excel文件直接

我有一个excel文件,我正在用OleDB用SQL在我的C程序上查询它。 但我面临一个问题。我的文件大约有30万行,查询时间太长。我在谷歌上搜索了这个问题,并使用了一些库,如spreadsheetlight和EPPlus,但它们没有查询功能。 有人能给我建议查询我的文件的最快方法吗


提前感谢。

我使用了400-800K行Excel文件。任务是读取所有行并将它们插入SQLServerDB。根据我的经验,OleDB无法及时处理如此大的文件,因此我们不得不使用SQL Server方法将Excel文件直接导入数据库,例如

甚至更小的文件,如260K行,使用OleDB使用Core2 Duo生成硬件逐行导入DB表大约需要一个小时

所以,在你的案例中,你可以考虑以下内容:

1.尝试使用“范围选择”分块读取Excel文件:

注意,[Sheet1$A1:Z10000]告诉OleDB只处理工作表A到Z列的前10K行,而不是整个工作表。例如,如果您的Excel文件已排序,并且您知道不需要检查所有行,而只需要检查今年的行,则可以使用此方法。或者,您可以动态更改Z10000以读取文件的下一个块,并将结果与上一个块合并

2.使用直接数据库导入将所有Excel文件内容直接导入数据库,例如前面提到的MS SQL Server的OPENROWSET,然后对RDBMS而不是Excel文件运行搜索查询

我个人建议选择2。评论是否可以使用DB,以及您可以使用什么RDBMS产品/版本(如果有)


希望这有帮助

你能告诉我你用了多长时间才处理的代码吗?@downvorters,这是OP提出的合理问题!如果您曾经使用OleDB处理过300-400K行Excel文件,您就会知道。甚至不需要代码。至少当执行这样的语句时,速度会很慢:SELECT*FROM[+sheetName+$”;查询实际上很简单。OleDbCommand date=新建OleDbCommand从[Sheet1$]中选择[+date+],其中[+key+]=+array[i]。ToString,connection@安德鲁斯:是的,速度很慢,我之前提到过。你能给我一个加快查询文件速度的建议吗?为什么ePlus不能工作?你所说的查询功能是什么意思?我非常感谢你的回答。以下是详细信息。我正在写一篇关于三天后再次住院的病人的论文,并研究原因。我有一年的医院记录,包括患者到达医院的日期,文件有30万行。首先我按patientID分组,然后在一个for循环中为每个患者id调用select查询,如下所示;从sheet1中选择日期,其中patientID=myarray[i]。正如我在评论中提到的。通过这种方式,我获取每个患者的所有到达日期,我检查,如果day@FK如果这是一次性活动,那么最好的解决方案是首先在DB中获取数据,然后使用SQL查询数据。否则会很痛苦。您以前是否使用过关系数据库管理系统、MySQL、PostregSQL、SQL Server?所有这些都适合你。我以前用过mysql。我想我要将所有数据导出到mysql数据库。如何将excel导出到mysql?@FK search google或StackOverflow关于如何将excel导入mysql,有很多示例。如果您定期收到带有访问的新文件,那么您可以设置夜间进程将所有数据导入mysql,然后在白天运行SQL查询。如果这个答案对您有帮助,请确保您将其标记为已接受,不幸的是,您无法投票,因为代表率低。@FK不客气!在发布答案之前,我已经对你的问题投了赞成票。如果您在将Excel数据导入MySQL时遇到问题,请发布另一个带有适当标记的问题,但一定要包含您的实际代码,以显示您试图阻止选民反对的内容。
OleDbCommand date = new OleDbCommand("SELECT ["+date+"] FROM [Sheet1$A1:Z10000]
                                  WHERE ["+key+"]= " + array[i].ToString(), connection);