sql查询返回xml数据之应用【转载】
今天查看邮件,看到一标题Using the FOR XML Clause to Return Query Results as XML,点进去看了看,以前也是知道sql server 查询可以返回xml格式,但具体一到应用中比较少,
读过文章后,想到自己的项目有调用远程web服务,传xml格式串方法,这个xml串是拼接而成的。想到此,决定做个测试,看程序中如何接收sql查询返回xml格式,为以后做
个笔记,方便自己查找。

测试步骤:

1.       创建测试数据,以用户表为例,创建语句和添加数据语句如下:

/*创建表*/

CREATE TABLE [dbo].[Users](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [UserID] [varchar](20) COLLATE Chinese_PRC_CI_AS NULL,
    [UserName] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
    [Address] [varchar](260) COLLATE Chinese_PRC_CI_AS NULL,
CONSTRAINT [PK_Users] PRIMARY KEY CLUSTERED
(
    [ID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

GO
-----------------插入测试数据
INSERT [Users] ( [UserID],[UserName],[Address]) VALUES ('su20090812001','kevin','beijing')
INSERT [Users] ( [UserID],[UserName],[Address]) VALUES ( 'su20090912002','zhangsan','tianjin')
INSERT [Users] ( [UserID],[UserName],[Address]) VALUES ( 'su20090701234','wangwu','shanghai')
INSERT [Users] ( [UserID],[UserName],[Address]) VALUES ( 'su20090912004','lisi','beijing')
INSERT [Users] ( [UserID],[UserName],[Address]) VALUES ( 'su20090912005','jialiu','hebei')
INSERT [Users] ( [UserID],[UserName],[Address]) VALUES ( 'su20090912007','qianlong','zhejiang')

复制代码

2.  
   在sql server management studio 中温习下 sql 查询加for xml后的结果集,主要是参考Using the FOR XML Clause to Return Query Results as XML文内容,在sql 语句结束处加for xml auto root(‘xxx’) elements等等。

(1):sql 语句:SELECT * FROM Users u   FOR XML raw

执行结果如下:

<row ID="1" UserID="su20090812001" UserName="kevin" Address="beijing" />

<row ID="2" UserID="su20090912002" UserName="zhangsan" Address="tianjin"/>

<row ID="3" UserID="su20090701234" UserName="wangwu" Address="shanghai"/>

<row ID="4" UserID="su20090912004" UserName="lisi" Address="beijing"/>

<row ID="5" UserID="su20090912005" UserName="jialiu" Address="hebei"/>

<row ID="6" UserID="su20090912007" UserName="qianlong" Address="zhejiang"/>

复制代码

(2):Sql语句:SELECT*FROM Users u   FOR XML RAW('User')

<User ID="1" UserID="su20090812001" UserName="kevin" Address="beijing" />

<User ID="2" UserID="su20090912002" UserName="zhangsan" Address="tianjin"/>

<User ID="3" UserID="su20090701234" UserName="wangwu" Address="shanghai"/>

<User ID="4" UserID="su20090912004" UserName="lisi" Address="beijing"/>

<User ID="5" UserID="su20090912005" UserName="jialiu" Address="hebei"/>

复制代码

<User ID="6" UserID="su20090912007" UserName="qianlong" Address="zhejiang" />

(3):Sql 语句SELECT * FROM Users u FOR XML RAW('User'),ROOT('Users'),elements 不在copy 执行结果了,大家自己执行下就可以看到效果了。

3.       在ASP.NET中如何获取这种形式的数据集呢。主要用到xmlreader(xmlTextReader),这里以xmlreader为例,

在程序代码中,主要用是用SqlCommand对象ExecuteXmlReader()方法,

下面是

具体的实现代码:

using System.Web.UI.WebControls;

using System.Xml;
using System.Data;
using System.Data.SqlClient;
using System.Text;
public partial class xmlUser : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            GetUserXml();
        }

}

private void GetUserXml()
    {
        SqlConnection conn = new SqlConnection("server=(local);uid=sa;pwd=kevin;database=demo;");
        SqlCommand cmd = new SqlCommand("SELECT * FROM Users u FOR XML RAW('User'),ROOT('Users'),elements",conn);
        XmlReader myreader = null;
        try
        {
            conn.Open();
            myreader = cmd.ExecuteXmlReader();
            StringBuilder sb = new StringBuilder();
            myreader.MoveToElement();
            while (myreader.IsStartElement())
            {   ///读取xml部分
                sb.Append(myreader.ReadOuterXml());
            }
            ///显示xml的内容
            Response.Write(Server.HtmlEncode(sb.ToString()).Replace("\n", "<br>"));

}
        catch(SqlException err)
        {
            //写日志略
          
        }
        finally
        {
            conn.Close();
        }
    }
}

复制代码

运行结果:

<Users>

<User><ID>1</ID><UserID>su20090812001</UserID><UserName>kevin</UserName><Address>beijing</Address></User>

<User><ID>2</ID><UserID>su20090912002</UserID><UserName>zhangsan</UserName><Address>tianjin</Address></User>

<User><ID>3</ID><UserID>su20090701234</UserID><UserName>wangwu</UserName><Address>shanghai</Address></User>

<User><ID>4</ID><UserID>su20090912004</UserID><UserName>lisi</UserName><Address>beijing</Address></User>

<User><ID>5</ID><UserID>su20090912005</UserID><UserName>jialiu</UserName><Address>hebei</Address></User>

<User><ID>6</ID><UserID>su20090912007</UserID><UserName>qianlong</UserName><Address>zhejiang</Address></User>

</Users>

得到sql 返回的xml格式的数据,以前我的那个项目拼接成的xml格式的字符串就可以省去一大部分拼接代码。没有测试过是在程序这边拼接效率好还是数据库返回xml

数据效率好,但编写的程序代码是减少很多。有兴趣的同学帮忙测测这两种方式哪种效率更好些呢。欢迎大家扔砖头。

参考:

Using the FOR XML Clause to Return Query Results as XML

http://www.simple-talk.com/content/article.aspx?article=720

如何使用SQLSERVER2000中的XML功能

http://www.legalsoft.com.cn/docs/docs/11/1001.html

使用ExecuteXMLReader()读取XML片段

    http://blog.csdn.net/sunhaiwei_andy/archive/2008/04/14/2289586.aspx
原地址:http://www.cnblogs.com/liushanshan/archive/2011/04/14/2016209.html

posted on 2010-12-14 23:49 搏击的小船 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/guanjie20/archive/2010/12/14/2288219.html

sql查询返回xml数据之应用【转载】相关推荐

  1. mysql获取亚马逊数据_亚马逊(MWS)订单查询-ListOrders查询返回xml数据保存数据库——PHP...

    //设置编码格式 header("Content-type: text/html; charset=utf-8"); //用mysqli来连接数据库(服务器,用户名,密码,数据库名 ...

  2. xquery_使用XQuery查询DB2 XML数据

    xquery 您可能已经听到有关DB2 V9的嗡嗡声,DB2 V9是IBM第一个同时支持表格(基于SQL)和分层(基于XML)数据结构的数据库管理系统. 该系列的前几篇文章总结了DB2的新XML功能, ...

  3. springmvc 返回xml数据

    2019独角兽企业重金招聘Python工程师标准>>> 直接上代码 public class BaseXmlResult {protected String code;protect ...

  4. Spring Boot 返回 XML 数据,一分钟搞定!

    2019独角兽企业重金招聘Python工程师标准>>> Spring Boot 返回 XML 数据,前提必须已经搭建了 Spring Boot 项目,所以这一块代码就不贴了,可以点击 ...

  5. sql查询和排序数据的方法

    sql查询和排序数据的方法 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 开发工具与关键技术: SQ ...

  6. 原生sql 查询返回一个实体_python连接SQLServer执行给定的查询SQL语句,并返回结果数据...

    今天写这篇文章的初衷就是在我昨天发表的文章<Python连接SQLServer数据库执行增删改查操作>后,一些读者反馈说跟Python完全没有关系,这里我想说的是:内容的确是与Python ...

  7. SQL查询单表数据之组合(三)

    [SQL从一点一滴分析系列文章]为实际开发中的点点滴滴的总结,从最最简单的SQL 查询 到 综合分析查询 在分析 SQL 时,也会同时分析 mybatis .Hibernate 中的相关操作 点击查看 ...

  8. SQL查询单表数据之排序(二)

    [SQL从一点一滴分析系列文章]为实际开发中的点点滴滴的总结,从最最简单的SQL 查询 到 综合分析查询 在分析 SQL 时,也会同时分析 mybatis .Hibernate 中的相关操作 点击查看 ...

  9. SQL查询单表数据(一)

    [SQL从一点一滴分析系列文章]为实际开发中的点点滴滴的总结,从最最简单的SQL 查询 到 综合分析查询 在分析 SQL 时,也会同时分析 mybatis .Hibernate 中的相关操作 点击查看 ...

最新文章

  1. imp 只导表前10条数据_做电商设计,你必须懂的10条数据指标
  2. 【转】自然语言系列学习之表示学习与知识获取(一)分布式表示
  3. python爬虫和医学数据_医学论文中的数据有什么软件可以对之进行收集和处理吗?爬虫?...
  4. java mysql failover_mysqlfailover测试
  5. 通过学习反编译和修改IL,阅读高人的代码,提高自身的水平。 【转】
  6. python 读取配置文件的单元测试_单元测试
  7. acrobat PDF删除部分_迅捷PDF转换器3.2.0Mod会员版
  8. svnadmin的使用
  9. Python-torch.optim优化算法理解之optim.Adam()
  10. 30天Python基础(正则表达式)
  11. Rstudio图片保存方式
  12. 关于手机系统。。。。
  13. CI Weekly #21 | iOS 持续集成快速入门指南
  14. Unity 使用BitmapFont制作自定义字体
  15. 制作 docker 精简 jre8 基础镜像
  16. IDEA: 自动优化导包 Auto Import
  17. Java解一元一次方程,一元二次方程,一元三次方程
  18. MVVM 模型是一种实现双向数据绑定的框架设计原理。
  19. 圆与圆的位置关系题目含答案_直线和圆的位置关系练习题附答案
  20. 计算机学科专业基础综合科目(408)

热门文章

  1. 2022-2028年中国生物基塑料产业发展动态及投资前景分析报告
  2. 2022-2028年中国热塑性聚酯PBT工程塑料行业市场全景调查及发展趋势分析报告
  3. 2018 Google kickstart Problem A. Planet Distance
  4. python with上下文管理
  5. tornado压力测试
  6. 用python下载文件的若干种方法汇总
  7. Pytorch中多GPU训练指北
  8. LeetCode简单题之复写零
  9. JavaWeb--过滤器
  10. 零起点学算法03——超简单模仿算术题