2013-09-06 6 views
15

Mam kwerendę sql, wybiera niektóre dane z tabela.Jak zrobić wynik kwerendy sql do pliku xml

ID Name Number Email 
1  a  123  [email protected] 
2  b  321  [email protected] 
3  c  432  [email protected] 

Otrzymuję te dane z tabeli. Chcę utworzyć plik xml z danych. Podobny do tego:

<Students> 
    <Student> 
     <id>1</id> 
     <name>a</name> 
     <number>123</number> 
     <email>[email protected]</email> 
    </Student> 
    <Student> 
     <id>2</id> 
     <name>b</name> 
     <number>321</number> 
     <email>[email protected]</email> 
    </Student> 
    <Student> 
     <id>3</id> 
     <name>c</name> 
     <number>432</number> 
     <email>[email protected]</email> 
    </Student> 
</Students> 

Jak mogę to zrobić na C# i serwerze SQL?

+0

chcesz utworzyć plik xml lub strukturę taką jak xml – Sasidharan

Odpowiedz

30

Spróbuj tego:

SELECT * 
FROM dbo.YourStudentTable 
FOR XML PATH('Student'), ROOT ('Students') 

ten powinien wrócić dokładnie XML, którego szukasz (zakładając masz SQL Server lub nowszy)

Przeczytaj more about how to use FOR XML PATH and its capabilities on TechNet

+1

Nie wiedziałem o tym. To prawie sprawiło, że mój rok. Masz moje podziękowania. –

+0

Witaj marc_s możesz mi pomóc – coderwill

1

1) Tworzenie klasy o nazwie studenta

[Serializable] 
public class Student 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public int Number { get; set; } 
    public string Email { get; set; } 
} 

2) Pobierz dane do listy zwane StudentList z bazy danych

3) Następnie otworzyć lub utworzyć pliku xml i dodać wartości

using (XmlWriter writer = XmlWriter.Create("Student.xml")) 
{ 
    writer.WriteStartDocument(); 
    writer.WriteStartElement("Students"); 

    foreach (Student student in StudentList) 
    { 
    writer.WriteStartElement("Student"); 

    writer.WriteElementString("id", student.ID.ToString()); 
    writer.WriteElementString("name", student.Name.ToString()); 
    writer.WriteElementString("number", student.Number.ToString()); 
    writer.WriteElementString("email", student.Email.ToString()); 

    writer.WriteEndElement(); 
    } 

    writer.WriteEndElement(); 
    writer.WriteEndDocument(); 
} 
4

SQL Server: tylko dodatek do @marc_s answer - należy zauważyć, że xml jest wrażliwy na wielkość liter ive, a wynikające XML będzie wyglądać

<Students> 
    <Student> 
     <ID>1</ID> 
     <Name>a</Name> 
     <Number>123</Number> 
     <Email>[email protected]</Email> 
    </Student> 
</Students> 

i jeśli będziesz próbować odzyskać id, nie znajdziemy niczego.

może chcesz zrobić coś takiego:

select 
    ID as id, 
    Name as name, 
    Number as number, 
    Email as email 
from dbo.Table1 
for xml path('Student'), root('Students') 

=> sql fiddle example.

C#: można użyć WriteXml metody:

var ds = new DataSet("Students"); 
var dt = ds.Tables.Add("Student"); 
dt.Columns.Add("id", typeof(int)); 
dt.Columns.Add("name", typeof(string)); 
dt.Columns.Add("number", typeof(string)); 
dt.Columns.Add("email", typeof(string)); 

dt.Rows.Add(1, "a", "123", "[email protected]"); 
dt.Tables[0].Rows.Add(2, "b", "321", "[email protected]"); 
dt.Tables[0].Rows.Add(3, "c", "432", "[email protected]"); 
var stream = new StringWriter(); 
ds.WriteXml(stream); 

lub przy użyciu LINQ do XML:

new XElement("Students", dt.AsEnumerable().Select(r => 
     new XElement("Student", 
      new XElement("id", r["id"]), 
      new XElement("name", r["name"]), 
      new XElement("number", r["number"]), 
      new XElement("email", r["email"]) 
     ))); 
1

Można wykorzystać DataSet.GetXml() funkcji dla uzyskania wyniku w pliku w formacie XML

Powiązane problemy