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
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.
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 StudentList
from 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();
}
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"])
)));
You can use DataSet.GetXml()
function for getting result in XML format file
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