我有一个可供 3 个用户使用的测试平台应用程序。
如果所有用户同时运行该应用程序,则会运行一个存储过程,并且这三个过程都会有结果集,目前使用 ADO.NET 数据表
,该应用程序随后需要大约 30,000 条记录为他们每个人移动到一个 Excel 模板。
模板是一个xlsm
文件,其中包含一些VBA
,需要在导入数据后运行。此模板保存在解决方案中。
我将尝试使用 Excel-Interop
将数据从 DataTable
移动到 worksheet
有没有人有将如此大量的数据从 Datatable 移动到 Excel 的经验?
@slugster 建议“从 Excel 设置数据源并使用脏读运行查询”...是否可以在链接到非物化数据表的 Excel
中设置数据源?
通过 xl interop
遍历一个 30000 行 x 10 列的表格是否会遇到问题?
最佳答案
Has anyone any experience of moving this amount of data from Datatable into Excel?
不是来自 DataTable 对象,而是使用 Excel 内置数据导入功能的数据量,是的。
@slugster suggested "setting up a datasource from Excel and just run the query using a dirty read" ... is it possible to set up a datasource in Excel linked to a non-materialized datatable?
我也建议这样做。为了更进一步,我建议创建一个存储过程然后调用它。使用存储过程您应该会看到更好的性能。该过程可以收集和准备数据,然后将其返回到 Excel。此外,您可以在过程中构建缓存机制。例如,如果您的数据每天只更改一次,那么您每天只重建源表中的数据一次,因此只有第一个请求数据的用户会受到初始性能影响。此外,根据您在 VBA 中的 Excel 中进行的后处理类型,也许也可以在过程中处理。如果您将 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 添加到该过程的顶部,或者在您愿意允许脏读的表上使用 (NOLOCK) 提示,该过程也将有助于减少锁定问题的可能性。
这是一篇关于在 Excel 中使用存储过程的好文章:http://codebyjoshua.blogspot.com/2012/01/get-data-from-sql-server-stored.html
Will looping through a table that is 30000 rows by 10 columns via xl interop run into problems?
这取决于您对“问题”的定义。我可以看到可能的性能影响,但是如果您在存储过程中尽可能多地处理,您应该没问题。在数据世界中,这真的很小。
关于c# - 多个用户同时请求 30,000 行信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14477263/