2013-03-12 2 views
0

Мне нужна помощь. Я был взад и вперед, в каком направлении мне нужно идти, и есть некоторые варианты, которые мне не нравятся или не могут использовать.Построение собственного объекта SqlDataReader

Я написал общий инструмент дампа данных, который извлекает данные с указанного сервера и выгружает их в файл с разделителями-запятыми. Это конфигурация и какой запрос запускается из таблицы SQL, созданной специально для этого инструмента. Однако у меня есть новое требование, что есть несколько дампов данных, которые нуждаются в данных, выведенных с разных серверов и объединенных вместе, но я не хочу изменять инструмент для этого «настраиваемого» типа pull/dump. Я пытаюсь сохранить его общий, поэтому я не постоянно кодирую его. Моя мысль состоит в том, чтобы создать lib, в котором мой инструмент отчетности может использовать для каждого из этих типов пользовательских типов, а данные, возвращаемые этой библиотекой, являются объектом SqlDataReader. Однако, так как этой библиотеке придется вытаскивать с разных серверов и объединять данные, возможно ли, чтобы lib создал собственный SqlDataReader с этими данными и вернулся к инструменту дампа данных, или я слишком много думаю об этом?

Я не хочу возвращать массив, потому что это не то, как инструмент теперь просматривает данные, главным образом потому, что некоторые из моих существующих дампов данных составляют миллионы строк, поэтому мой существующий цикл представляет собой цикл данных, чтобы сохранить память. Тем не менее, libs могут создавать двухмерный массив, если он может быть преобразован в объект SqlDataReader перед возвратом. Таким образом, мне не нужно сильно менять цикл в моем приложении.

Надеюсь, что все имеет смысл. У меня это в голове, подпрыгивая, так что я написал это как 10 раз.

Редактировать: Имейте в виду, что каждая запись будет разбросана по 3 серверам и должна быть объединена. Это три разных процесса, которые работают вместе, но имеют свои собственные серверы. Например, идентификатор с сервера 1 будет относиться к Server1ID на сервере Server2.

+0

Если вы пишете что-то в 10 раз, возможно, вам нужно что-то сделать с помощью шаблонов проектирования, а также для рефакторинга кода/реализации интерфейсов для конкретных функций, которые будут специфичны для существующего проекта, не влияя на исходное состояние вашего кода , – MethodMan

+0

@MahmoudFayez это сервис, который извлекает и удаляет данные, что не поможет, так как запись 1 разбросана по всем серверам и должна быть объединена. – Switch

ответ

0

Я придумал решение. Я напишу объект, который будет выполняться динамическим путем создания «настраиваемого» отчета. Этот объект будет извлекать данные с первого сервера и вставлять их в локальную таблицу/SQL Server. Затем он перейдет на следующий сервер, вытащит данные на основе первых данных и обновит их на одном сервере. Затем, наконец, последний сервер, чтобы вытащить окончательные данные, которые также должны быть объединены в мою локальную таблицу. После того, как все это будет правильно слито, я выберу * назад, как DataReader, который необходим для исходного объекта Data/Dump exe. Кажется, это единственный реальный способ сделать эту работу без изменения исходного EXE для каждого пользовательского потока данных.

Спасибо за вклад каждого.

+0

Таким образом, отлично работает. – Switch

1

Все классы доступа к данным ADO.NET реализуют общие интерфейсы, поэтому вы можете вернуть IDataReader вместо SqlDataReader.

+0

Вопрос все еще останется, могу ли я создать один объект IDataReader с данными, которые у меня есть с 3 разных серверов? Имейте в виду, что эти три сервера предоставляют мне разные части данных, поэтому запись будет разбросана по всем трем серверам. – Switch

+0

Вы можете создать класс, который реализует 'IDataReader', если вы хотите, но в зависимости от того, на какой базе данных вы нацеливаетесь, вероятно, для него уже существуют клиентские библиотеки C# (такие как MySql, Oracle, SQLite, PostgreSql и т. Д.). –

+0

Возможно, мне не ясно, на каком направлении. Позвольте мне попробовать это, возможно ли взять массив строк и вставить его в IDataReader? – Switch

Смежные вопросы