zoukankan      html  css  js  c++  java
  • SQL Server返回XML格式数据

    直接看例子吧,假设一张users表,里面只有id和Pwd两个字段。

    1,最简单的用法:

    select * from users for xml auto

    得到结果如下:

    <users id="walker" pwd="walker" />
    <users id="walker" pwd="1C3A0B25C3D1C909E2BCB9FE44C2F904" />
    <users id="walker2" pwd="1C3A0B25C3D1C909E2BCB9FE44C2F904" />
    <users id="walker3" pwd="1C3A0B25C3D1C909E2BCB9FE44C2F904" />
    <users id="walker4" pwd="1C3A0B25C3D1C909E2BCB9FE44C2F904" />
    <users id="walker5" pwd="1C3A0B25C3D1C909E2BCB9FE44C2F904" />
    <users id="john" pwd="insert time:2010/09/06 11:50:40" />
    <users id="steph" pwd="insert time:2010/09/06 11:50:40" />
    <users id="john" pwd="insert time:2010/09/06 11:50:53" />
    <users id="steph" pwd="insert time:2010/09/06 11:50:53" />
    <users id="john" pwd="insert time:2010/09/06 11:51:01" />
    <users id="steph" pwd="insert time:2010/09/06 11:51:01" />

    2,每一个数据行生成一个节点的方法(注,此时每个节点的名字默认为row,可用自定义的名字代替,此处为设为users)

    select * from users for xml raw ('users')--如果不加(‘users'),则节点名为row

    因为我把节点名设成了users,则此时生成的xml数据和上例一模一样。否则也只有节点名不一样。

    3,path用法:

    select id "user/id", pwd "user/pwd" from users for xml path

    结果:1,2都是把列作为属性,path用法则把列变成了节点,并且我顺便演示了怎么去自定义层级关系

    <row>
      <user>
        <id>walker</id>
        <pwd>walker</pwd>
      </user>
    </row>
    <row>
      <user>
        <id>walker</id>
        <pwd>1C3A0B25C3D1C909E2BCB9FE44C2F904</pwd>
      </user>
    </row>
    <row>

    4,EXPLICIT 用法,暂时没有研究。。。

    差不多了,可是正好我用的是linq to xml,用到如下代码来读取xml数据:

                string sql = "select * from users for xml auto";//结果将以xml格式呈现
                SqlDatabase db = DatabaseFactory.CreateDatabase() as SqlDatabase;
                IEnumerable<string> result = null;
                DbCommand cmd = db.GetSqlStringCommand(sql);
    
                using (var reader = db.ExecuteXmlReader(cmd))
                {
                    if (reader.IsStartElement())
                    {
                        var root = (XElement)XNode.ReadFrom(reader);//linq to xml用法
                        result = root.Elements("users").Attributes("id").Select(x => x.Value);
                    }
                    return result;
                }

    此时用root.Elements(“users”).attributes(“id”)…取不到值,纠结之下用xml文档测试,发现能正常取值,才想到,可能是没有根节点的缘故(C#理解成多个根节点,因为每个节点名都一样),

    经测试,确实如此,那么如何更改查询语句呢? 上述所有的查询语句后面加一个root(‘yourname’)即可,如:

    select * from users for xml auto , root ('info')

    结果为:

    <info>
      <users id="walker" pwd="walker" />
      <users id="walker" pwd="1C3A0B25C3D1C909E2BCB9FE44C2F904" />
      <users id="walker2" pwd="1C3A0B25C3D1C909E2BCB9FE44C2F904" />
      <users id="walker3" pwd="1C3A0B25C3D1C909E2BCB9FE44C2F904" />
      <users id="walker4" pwd="1C3A0B25C3D1C909E2BCB9FE44C2F904" />
      <users id="walker5" pwd="1C3A0B25C3D1C909E2BCB9FE44C2F904" />
      <users id="john" pwd="insert time:2010/09/06 11:50:40" />
      <users id="steph" pwd="insert time:2010/09/06 11:50:40" />
      <users id="john" pwd="insert time:2010/09/06 11:50:53" />
      <users id="steph" pwd="insert time:2010/09/06 11:50:53" />
      <users id="john" pwd="insert time:2010/09/06 11:51:01" />
      <users id="steph" pwd="insert time:2010/09/06 11:51:01" />
    </info>
  • 相关阅读:
    ZOJ 2601 Warehouse Keeper
    POJ 2175 Evacuation Plan
    NYIST 1108 最低的惩罚
    二进制 与 十进制 互转
    javascript学习(9)——[设计模式]单例
    2013 Changsha Regional 一样的木板一样的气球
    muduo简化(1):Reactor的关键结构
    Oracle 11g New 热补丁
    跳转表实例
    [置顶] android 心跳包的分析
  • 原文地址:https://www.cnblogs.com/walkerwang/p/1820705.html
Copyright © 2011-2022 走看看