我有一个可供3位用户使用的测试床应用程序。
如果所有用户同时运行应用程序,则运行存储过程,并且所有三个都将具有结果集,当前使用大约30,000条记录的ADO.NET Datatable
,然后应用程序需要将这些记录移动到Excel模板中对于他们每个人。
模板是xlsm
文件,其中包含导入数据后需要运行的一些VBA
。此模板保存在解决方案中。
我将尝试使用DataTable
worksheet
移至Excel-Interop
有没有人有将数据量从Datatable转移到Excel的经验?
@slugster建议“从Excel设置数据源并使用脏读操作运行查询”...是否可以在Excel
中设置链接到非物化数据表的数据源?
通过xl interop
循环遍历30000行×10列的表会遇到问题吗?
答案 0 :(得分:1)
是否有任何从Datatable移动此数据量的经验 进入Excel?
不是来自DataTable对象,而是使用Excel内置的导入数据的数据量,是的。
@slugster建议“从Excel设置数据源然后运行 使用脏读的查询“...是否可以设置一个 Excel中的数据源链接到非物化数据表吗?
我也建议这样做。为了更进一步,我建议创建一个存储过程,然后调用它。您应该使用存储过程看到更好的性能。该过程可以收集并准备数据,然后将其返回到Excel。此外,您可以在过程内部构建缓存机制。例如,如果您的数据每天只更改,那么您每天只会重建一次源表中的数据,因此只有第一个请求数据的用户才会获得初始性能影响。此外,根据您在VBA中使用Excel进行的后期处理类型,也许可以在过程中处理。如果将SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED添加到过程的顶部,或者在您愿意允许脏读的表上使用(NOLOCK)提示,该过程还将有助于减少锁定问题的可能性。
这是一篇关于在Excel中使用存储过程的好文章:http://codebyjoshua.blogspot.com/2012/01/get-data-from-sql-server-stored.html
将通过xl循环遍历30000行×10列的表 互操作遇到问题?
这取决于您对“问题”的定义。我可以看到可能的性能影响,但是如果你在存储过程中尽可能多地处理,你应该没问题。在数据世界中,这真的很小。