Cómo hacer que el resultado de la consulta sql al file xml

Tengo una consulta sql, selecciona algunos datos de una tabla.

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

Obtengo estos datos de la tabla. Quiero crear un file xml a partir de los datos. Me gusta esto

 <Students> <Student> <id>1</id> <name>a</name> <number>123</number> <email>a@a.com</email> </Student> <Student> <id>2</id> <name>b</name> <number>321</number> <email>b@b.com</email> </Student> <Student> <id>3</id> <name>c</name> <number>432</number> <email>c@c.com</email> </Student> </Students> 

¿Cómo puedo hacerlo en C # y SQL Server?

Prueba esto:

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

Esto debería devolver exactamente el XML que está buscando ( suponiendo que tiene SQL Server 2005 o posterior)

Obtenga más información acerca de cómo usar FOR XML PATH y sus capacidades en TechNet

SQL Server : solo una adición a la respuesta de @marc_s : tenga en count que xml distingue entre mayúsculas y minúsculas y que xml resultante se verá como

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

y si intentas recuperar la id , no encontrarás nada.

es posible que desee hacer algo como esto:

 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 # : puede usar el método WriteXml :

 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); 

o usando Linq a 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"]) ))); 

Aunque la solución proporcionada por oru es exactamente lo que necesita, le conviene profundizar en las diversas opciones del artículo Uso de la cláusula FOR XML para devolver los resultados de la consulta como XML .

1) Crear class llamada estudiante

 [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) Obtener datos en la Lista llamada StudentList de la Base de Datos

3) A continuación, abra o cree un file xml y agregue valores

 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(); } 

Puede usar la function DataSet.GetXml() para get el resultado en un file de formatting XML