2013-03-12 54 views
0

我需要一些帮助。我一直在前进,我应该去哪个方向,并有一些我不喜欢或可以使用的选项。构建我自己的SqlDataReader对象

我写了一个通用数据转储工具,用于从指定服务器提取数据并将其转储到逗号分隔文件。它的配置和运行的查询来自专门为此工具创建的SQL表。然而,我有一个新的要求,即有一些数据转储需要从不同服务器提取数据并合并到一起,但我不想为这种“自定义”类型的转储/转储更改工具。我试图保持它的通用性,所以我不会经常编码。我的想法是创建一个库,在这个库中,我的报告工具可以用于这些定制类型的每个拉,并且此库返回的数据是SqlDataReader对象。但是,由于这个lib将不得不从不同的服务器上取出并合并数据,是否有可能让lib使用这个拉取的数据创建它自己的SqlDataReader并返回到数据转储工具,或者我想这太多了?

我不想返回数组,因为它不是现在如何通过数据循环工具,主要是因为我现有的一些数据转储是数百万行,所以我现有的循环是一个数据读取器循环来保持内存不变。然而,这些库可能会创建一个二维数组,只要它可以在返回之前转换为SqlDataReader对象。这样我就不必在我的应用程序中改变太多循环。

希望大家都有道理。我在我的脑海里弹跳,所以我最终写了10次。

编辑:请记住,每条记录将分散在3台服务器上,必须合并。这三个不同的进程一起工作,但有自己的服务器。例如,来自服务器1的ID将与Server2上的Server1ID相关。

+0

如果你写了10次,也许你需要考虑用设计模式做一些事情,以及重构你的代码/实现接口以获得特定于现有项目的特定功能,而不会影响代码的原始状态。 – MethodMan 2013-03-12 16:07:25

+0

@MahmoudFayez这是一种可以提取和转储数据的服务,这无助于记录1分散在所有服务器上并需要合并。 – Switch 2013-03-12 16:33:37

回答

0

我想出了一个解决方案。我将编写该对象,该对象将根据要生成的“自定义”报告动态生成。该对象将从第一台服务器提取数据并将其插入到本地表/ SQL Server中。然后它会转到下一台服务器,根据第一个数据提取数据并在同一台服务器中更新它。最后,最后一个服务器将最终数据提取出来,这些数据也需要合并到我的本地表中。一旦所有这些都合并正确,我将选择* back作为原始调用者Data/Dump exe所需的DataReader。似乎是使这项工作无需修改每个自定义数据拉的原始exe文件的唯一真正方法。

感谢大家的意见。

+0

这样,完美的作品。 – Switch 2013-03-14 13:55:37

1

所有ADO.NET数据访问类都实现通用接口,因此您可以返回IDataReader而不是SqlDataReader

+0

问题仍然存在,我可以使用3台不同服务器的数据创建一个IDataReader对象吗?请记住,这三台服务器为我提供了不同的数据部分,因此记录一台将分散在所有3台服务器上。 – Switch 2013-03-12 16:16:03

+0

如果您想要,您可以创建一个实现“IDataReader”的类,尽管取决于您定位的数据库,可能已经有C#客户端库(例如MySql,Oracle,SQLite,PostgreSql等)。 – 2013-03-12 16:18:00

+0

我可能不清楚我的方向。让我试试这个,是否可能需要一个字符串数组并将其插入到IDataReader中? – Switch 2013-03-12 16:50:20