How to make sql query result to xml file

后端 未结 5 1982
小鲜肉
小鲜肉 2020-12-09 17:18

I have an sql query, selects some data from a table.

ID    Name    Number    Email
1      a        123       a@a.com
2      b        321       b@b.com
3              


        
相关标签:
5条回答
  • 2020-12-09 17:35

    Though the solution provided by marc is exactly what you need, you may want to have a deeper look at various options in the article Using the FOR XML Clause to Return Query Results as XML.

    0 讨论(0)
  • 2020-12-09 17:37

    1) Create class called student

    [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) Get data into List called StudentListfrom Database

    3)Then open or create xml file and add values

    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();
    }
    
    0 讨论(0)
  • 2020-12-09 17:41

    SQL Server: just an addition to @marc_s answer - note that xml is case-sensitive, and resulting xml will look like

    <Students>
       <Student>
          <ID>1</ID>
          <Name>a</Name>
          <Number>123</Number>
          <Email>a@a.com</Email>
      </Student>
    </Students>
    

    and if you'll try to retrieve id, you'll not find anything.

    you may want to do something like this:

    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#: you can use WriteXml method:

    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", "a@a.com");
    dt.Tables[0].Rows.Add(2, "b", "321", "b@b.com");
    dt.Tables[0].Rows.Add(3, "c", "432", "c@c.com");
    var stream = new StringWriter();
    ds.WriteXml(stream);
    

    or using Linq to 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"])
           )));
    
    0 讨论(0)
  • 2020-12-09 17:44

    You can use DataSet.GetXml() function for getting result in XML format file

    0 讨论(0)
  • 2020-12-09 17:46

    Try this:

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

    This should return exactly the XML you're looking for (assuming you have SQL Server 2005 or newer)

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

    0 讨论(0)
提交回复
热议问题