Создание файлов из записи в базе данных в .Net - PullRequest
0 голосов
/ 29 января 2011

У меня есть таблица базы данных со следующей структурой:

Столбцы: DealID (int), CustomerID (int), DocumentArchiveID (int), DealXML (строка XML)

Проблемаis:

значение для поля CustomerID может появляться в таблице несколько раз, но каждый раз, когда кажется, что DealXML, связанный с ним, уникален.Мне нужно подключиться к таблице и создать файл XML, содержащийся в столбце DealXML, но только один файл на CustomerID.Таким образом, в основном, если CustomerID появляется 5 раз, мне нужно создать один файл со всеми связанными данными DealXML в этом файле ... если CustomerID появляется только один раз, тогда я создаю один файл, содержащий только DealXML этого CustomerID.Таким образом, в конце всего этого мне нужен один файл для каждого уникального экземпляра CustomerID, но каждый файл должен содержать все данные DealXML, связанные с этим конкретным CustomerID.Я в полной растерянности относительно того, как этого добиться, и я сталкиваюсь с крайним сроком.

Сводка: необходимо создать файл для каждого уникального экземпляра CustomerID (CustomerID может появляться в таблице много раз, каждый раз с отдельным DealXML, который должен входить в файл) - каждый файл содержит всеDealXML для этого конкретного CustomerID.

Я думал о создании FileStream с FileMode.Append, создании уникального файла для каждого уникального CustomerID в базе данных, но, к сожалению, я не могу контролировать то, что я называю своими файлами (они должны придерживаться соглашения, установленного за пределамимоя организация) и не может использовать этот метод для создания уникальных файлов (на основе CustomerID), что было моей первой идеей.

Я делаю это на платформе .Net, используя C # и базу данных SQL Server 2008.

Любая помощь?Кто-нибудь?Обратная связь высоко ценится.

Ответы [ 2 ]

2 голосов
/ 29 января 2011

Сначала вам нужен запрос, который вернет вам все в правильном порядке:

SELECT CustomerID, DealID, DealXML FROM TABLE ORDER BY CustomerID, DealID

Следующий цикл по результатам. Каждый раз, когда вы сталкиваетесь с новым CustomerID, просто создайте новый файл (используя те соглашения, которые вам нужны) и напишите xml (обратите внимание, что вам придется обернуть все значения DealXML корневым элементом, чтобы создать правильно сформированный xml):

<customerData>
     <DealXML />
     <DealXML />
     <DealXML />
</customerData>

РЕДАКТИРОВАТЬ: Вы можете сделать что-то вроде этого (это некоторый набросок кода - но это дает вам основную идею) ... Основная идея заключается в том, что вы кладете XMLS сделки в коллекцию, пока вы не переместите другому идентификатору клиента.

int previousCustomerId = -1;

List<string> deals = new List<string>();

while(rs.ReadNext())
{
   int customerId = rs["CustomerID"];

   if (customerId != previousCustomerId)
   {
       //Don't do this on the first go
       if (customerId != -1)
       {

          //Generate a filename
          string filename = GenerateFileName(customerId);  

          //There are better ways to write multiple values to a file,
          //  but this should give you an idea of where to start.
          File.AppendText(filename, "<customerData>");

          //Dump all of the DealXML values to the file
          foreach(string deal in deals)
              File.AppendText(filename, deal);

          File.AppendText(filename, "</customerData>");
       }

       //Reinitialize the list
       deals = new List<string>();

       //Save the new customer id
       previousCustomerID = customerId;

   }

   deals.Add((string)rs["DealXML"]);
}
0 голосов
/ 29 января 2011

Что ж, грубым методом можно было бы запросить различные CustomerID с. Если DealXML обнуляем, вы должны select distinct CustomerID from table X where DealXML is not null

Затем зациклите полученный набор данных. В каждом цикле запрашивайте DealXML для текущего идентификатора клиента. Вы получите набор данных с 1 или более строками; откройте новый файл, выполните цикл по набору данных и добавьте файл.

Вам нужно будет обернуть вокруг XML каждого клиента, чтобы он был правильно сформирован ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...