Лучший способ заполнить XML из SQL-запроса в ASP.NET? - PullRequest
1 голос
/ 20 марта 2009

Мне нужно создать сервис, который будет возвращать XML, содержащий данные из базы данных. Поэтому я думаю об использовании ASHX, который будет принимать такие вещи, как диапазон дат и POST XML-файл обратно. Я имел дело со страницами, которые извлекают данные из SQL Server и заполняют сетку данных для визуального отображения, а не в XML для доставки. Каков наилучший способ сделать это? Также, если ASHX и POST не лучший способ доставки, дайте мне знать ... спасибо!

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

Ответы [ 6 ]

2 голосов
/ 20 марта 2009

Объединение linq2sql с классами XElement, что-то вроде:

var xmlContacts =
      new XElement("contacts",
         (from c in context.Contacts
         select new XElement("contact",
            new XElement
            {
               new XElement("name", c.Name), 
               new XElement("phone", c.Phone),
               new XElement("postal", c.Postal)
            )
         )
         ).ToArray()
      )
   );

Linq2sql извлечет данные за один вызов БД, и обработка XML будет выполнена на бизнес-сервере. Это лучше распределяет нагрузку, поскольку сервер SQL не выполняет всю работу.

1 голос
/ 20 марта 2009

Начиная с SQL Server 2000, вы можете возвращать результаты запроса в виде XML. Для абсолютного контроля над ними используйте команду «FOR XML EXPLICIT». Вы можете использовать любой формат по вашему желанию.

http://msdn.microsoft.com/en-us/library/ms189068.aspx

Это так же просто, как записать ваш результат в необработанный вывод. Для добавленных точек вы можете вернуть результирующий набор в XPathDocument, пропустить его через XSL-преобразование и отправить результаты в любом формате, который вы выберете (возможно, HTML или XML одним нажатием кнопки).

1 голос
/ 20 марта 2009

Sql Server 2005 и выше имеет команду «FOR XML AUTO», которая преобразует ваш набор записей в XML для вас. Тогда вам просто нужно вернуть строку из вашего ASHX.

1 голос
/ 20 марта 2009

Вы пробовали DataSet.WriteXml () ?

Это может быть вывод вызова веб-службы.

0 голосов
/ 22 марта 2009

Преобразование автоматически сгенерированного формата в указанный - это работа для xslt. Просто найдите способ запустить вывод из инструмента через фильтр xslt.

У Oracle есть отличный продукт для выполнения именно этой работы - оракул XDK. Но я знаю, что это Java, а не ASP.

Например, этот XHTML http://www.anbg.gov.au/abrs/online-resources/flora/stddisplay.xsql?pnid=2524

генерируется автоматически из этого XML, который генерируется оракулом http://www.anbg.gov.au/abrs/online-resources/flora/stddisplay.xsql?pnid=2524&xml-stylesheet=none

Конечно, вам не нужен XHTML, но какой-то другой формат XML. Но XSLT сделает эту работу.

0 голосов
/ 20 марта 2009

вы можете получить это в datatable и затем вызвать myTable.WriteXML ()

если вы заполняете классы результатами вашей базы данных, добавьте атрибут serializable в заголовок ваших классов и используйте XMLSerializer

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