【问题标题】:How to make sql query result to xml file如何将sql查询结果生成xml文件
【发布时间】:2013-09-10 08:10:09
【问题描述】:

我有一个 sql 查询,从表中选择一些数据。

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

我从表中获取这些数据。我想从数据中创建一个 xml 文件。像这样

<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# 和 SQL Server 上做到这一点?

【问题讨论】:

  • 你想创建xml文件或类似xml的结构

标签: c# sql sql-server xml


【解决方案1】:

试试这个:

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

这应该准确返回您正在寻找的 XML(假设您有 SQL Server 2005 或更新版本)

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

【讨论】:

  • 我不知道。这几乎成就了我的一年。谢谢你。
【解决方案2】:

SQL 服务器: 只是对@marc_s answer 的补充 - 请注意 xml 区分大小写,生成的 xml 看起来像

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

如果您尝试检索id,您将找不到任何东西。

你可能想做这样的事情:

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#: 你可以使用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);

或使用 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"])
       )));

【讨论】:

    【解决方案3】:

    1) 创建名为 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) 将数据放入名为StudentListfrom Database 的列表中

    3)然后打开或创建xml文件并添加值

    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】:

      您可以使用DataSet.GetXml() 函数获取 XML 格式文件的结果

      【讨论】:

        【解决方案5】:

        虽然 marc 提供的解决方案正是您所需要的,但您可能希望更深入地了解文章 Using the FOR XML Clause to Return Query Results as XML 中的各种选项。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-18
          • 1970-01-01
          相关资源
          最近更新 更多