我需要一些帮助。我一直在往哪个方向走,而且有一些我喜欢或不能使用的选项。
我编写了一个通用数据转储工具,它从指定的服务器提取数据并将其转储到逗号分隔的文件中。它的配置和运行的查询来自专门为此工具创建的SQL表。但是,我有一个新的要求,即有一些数据转储需要从不同的服务器中提取数据并合并在一起,但我不想改变这种“自定义”类型的拉/转的工具。我试图保持它的通用性,所以我不会经常编写它。我的想法是创建一个lib,我的报告工具可以在其中使用这些自定义类型的pull中的每一个,并且此lib返回的数据是SqlDataReader对象。但是,由于这个lib必须从不同的服务器中提取并合并数据,因此lib可能会使用这个拉取的数据创建它自己的SqlDataReader并返回到数据转储工具,或者我想到这个太多了?
我不想返回一个数组,因为它不是工具现在循环数据的方式,主要是因为我现有的一些数据转储是数百万行,所以我现有的循环是一个数据引导循环来保持内存不足。但是,libs可以创建一个二维数组,只要它可以在返回之前转换为SqlDataReader对象。这样我就不必在应用程序中对循环进行太多改动。
希望一切都有道理。我在脑袋里蹦蹦跳跳,所以我最终写了10次。
编辑:请记住,每条记录将分散在3台服务器上,必须合并。这三个不同的进程协同工作,但拥有自己的服务器。例如,来自服务器1的ID将与Server2上的Server1ID相关。
答案 0 :(得分:1)
所有ADO.NET数据访问类都实现了通用接口,因此您可以返回IDataReader
而不是SqlDataReader
。
答案 1 :(得分:0)
我想出了一个解决方案。我将根据要生成的“自定义”报告动态编写对象。此对象将从第一个服务器提取数据并将其插入本地表/ SQL Server。然后它将转到下一个服务器,根据提取的第一个数据提取数据并在同一服务器内更新它。然后最后最后一个服务器拉出最终数据,这也需要合并到我的本地表中。一旦所有合并正确,我将选择* back作为原始调用者Data / Dump exe所需的DataReader。似乎是唯一可以在不修改每个自定义数据拉动的原始exe的情况下实现此功能的真正方法。
感谢大家的投入。