Kategorie szkoleń | Egzaminy | Kontakt

Odpowiedzi (3)

  • 2

Używając obiekt kontextowy EDM i zapytania LINQ, możemy wylistować kolekcję encji z bazy danych. Za pomocą klasy XElement możemy kolekcję encji zapisać do pliku xml. XElement posiada prosty konstruktor (tag, wartość):

 

BazaEntity objctx = new BazaEntity();
Xelement xel = new XElement("Główny",
           XElement("Blog", 
              from a in objctx.Blogs.ToList() select 
                   new XElement("ID", a.id_blog),
                   new XElement("Nazwa", a.nazwa)));
xel.Save("plik.xml");

 

Nasz plik XML będzie wyglądał przykładowo:

 

<?xml version="1.0" encoding="UTF-8"?>
<Główny>
<Blog>
  <ID>1</ID>
  <Nazwa>Blog nr 1</Nazwa>
</Blog>
<Blog>
  <ID>2</ID>
  <Nazwa>Blog nr 2</Nazwa>
</Blog>
<Blog>
  <ID>3</ID>
  <Nazwa>Blog nr 3</Nazwa>
</Blog>
</Główny>

 

 

  • Odpowiedział
  • @ | 22.07.2014
  • TRENER ALTKOM AKADEMII
  • 2

Inny sposób to wykorzystanie wbudowanego mechanizmu w SQL Server, a dokładnie klauzuli FOR XML.

 

Umożliwia ona zamianę danych relacyjnych na postać dokumentu XML. 

Na przykład:

 

SELECT Cust.CustomerID, 
       OrderHeader.CustomerID,
       OrderHeader.SalesOrderID, 
       OrderHeader.Status,
       Cust.CustomerType
FROM Sales.Customer Cust, Sales.SalesOrderHeader OrderHeader
WHERE Cust.CustomerID = OrderHeader.CustomerID
ORDER BY Cust.CustomerID
FOR XML AUTO

 

Otrzymamy wynik:

 

<Cust CustomerID="1" CustomerType="S">
  <OrderHeader CustomerID="1" SalesOrderID="43860" Status="5" />
  <OrderHeader CustomerID="1" SalesOrderID="44501" Status="5" />
  <OrderHeader CustomerID="1" SalesOrderID="45283" Status="5" />
  <OrderHeader CustomerID="1" SalesOrderID="46042" Status="5" />
</Cust>

 

Jak widać na tym przykładzie, rekordy zostały zamienione na elementy, a wartości w kolumnach na artrybuty.

Jeśli bardziej odpowiada nam postać elementowa, to możemy dodać słowo klucz ELEMENTS. Wówczas rekordy i kolumny zostaną zamienione na zagnieżdżone elementy, dokumenty XML.

Przykład:

 

SELECT Cust.CustomerID, 
       OrderHeader.CustomerID,
       OrderHeader.SalesOrderID, 
       OrderHeader.Status,
       Cust.CustomerType
FROM Sales.Customer Cust, Sales.SalesOrderHeader OrderHeader
WHERE Cust.CustomerID = OrderHeader.CustomerID
ORDER BY Cust.CustomerID
FOR XML AUTO, ELEMENTS

 

Rezultat:

 

<Cust>
  <CustomerID>1</CustomerID>
  <CustomerType>S</CustomerType>
  <OrderHeader>
    <CustomerID>1</CustomerID>
    <SalesOrderID>43860</SalesOrderID>
    <Status>5</Status>
  </OrderHeader>
   ...
</Cust>
...

 

Dzięki dodatkowym przełącznikom możemy jeszcze bardziej dopasować XML do naszych wymagań (namespace, nazwy elementów

itd).

Polecam artykuł: http://msdn.microsoft.com/en-us/library/ms178107.aspx

Tak otrzymany dokument możemy pobrać do aplikacji napisanej w C# jako dane tekstowe i zapisać do pliku.

 

 

  • Odpowiedział
  • @ | 03.09.2014
  • TRENER ALTKOM AKADEMII
  • 2

Jeśli chodzi o sam zapis do pliku to można napisać aplikację np. w C# lub skorzystać z rowiązania zapronowanym w innym wątku:

https://quorum.akademiq.pl/discussion/2935/zapisywanie-wynikow-kwerendy-do-pliku#Comment_4154

  • Odpowiedział
  • @ | 03.09.2014
  • TRENER ALTKOM AKADEMII