Como fazer o resultado da pesquisa sql para o arquivo xml

tenho uma consulta sql, selecciona alguns dados de uma tabela.

ID    Name    Number    Email
1      a        123       [email protected]
2      b        321       [email protected]
3      c        432       [email protected]
Tenho estes dados da mesa. Quero criar um ficheiro xml a partir dos dados. Assim.
<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>
Como posso fazê-lo no servidor C e SQL ?

Author: marc_s, 2013-09-06

5 answers

Tenta isto:

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

Isto deve devolver exactamente o XML que procura (assumindo que tem um servidor de SQL2005 ou mais recente)

Leia mais sobre como utilizar FOR XML PATH e as suas capacidades no TechNet

 31
Author: marc_s, 2013-09-06 09:23:37

SQL Server : apenas uma adição à resposta @marc_s - lembre-se que o xml é sensível à capitalização, e o xml resultante parecerá com

<Students>
   <Student>
      <ID>1</ID>
      <Name>a</Name>
      <Number>123</Number>
      <Email>[email protected]</Email>
  </Student>
</Students>
E se tentares recuperar, não vais encontrar nada.

Você pode querer fazer algo assim:

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

=> exemplo de violino sql.

C#: pode utilizar WriteXml método:

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

Ou usando o Linq para 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"])
       )));
 4
Author: Roman Pekar, 2017-05-23 11:46:34

1) Criar uma classe chamada estudante

[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) Obter Dados na lista chamada StudentList a partir da Base de dados

3)Abrir ou criar um ficheiro xml e adicionar 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();
}
 2
Author: thilipan, 2013-09-06 09:32:13

Embora a solução fornecida pelo marc seja exactamente o que necessita, poderá querer analisar mais aprofundadamente várias opções no artigo {[[2]}, Usando a cláusula FOR XML para devolver os resultados da pesquisa como XML .

 1
Author: Giannis Paraskevopoulos, 2013-09-06 09:23:29

Pode usar a função DataSet.GetXml() para obter o resultado no ficheiro de formato XML

 1
Author: Ram Khumana, 2013-09-06 10:47:54