频 道 直 达 - 新闻 - 读书 - 培训 - 教程 - 前沿 - 组网 - 系统应用 - 安全 - 编程 - 存储 - 操作系统 - 数据库 - 服务器 - 专题 - 产品 - 案例库 - 技术圈 - 博客 - BBS
51CTO.COM_中国领先的IT技术网站
找资料:

从 SQL Server 2005 中处理 XML(1)

作者: Bob Beauchemin 出处:Microsoft  (  ) 砖  (  ) 好  评论 ( ) 条  进入论坛
更新时间:2005-11-15 13:50
关 键 词:SQL  XML  SQL Server  SQL Server 2005
阅读提示: 查看 Microsoft ADO.NET 2.0 中对 XML 支持的改进如何与 Microsoft SQL Server 2005 共同工作以使处理应用程序中的 XML 数据更为容易。

一、简介

Microsoft SQL Server 2005 中的重大更改之一是包含了 XML 数据类型。此数据类型是第一类类型,就像 INTVARCHAR 一样,而且 SQL Server 2005 允许使用一系列 XML 特定的函数对此数据类型进行就地查询和处理。它还支持存储数据库中的 XML 架构的集合,从而启用基于数据库的架构验证。另外,SQL Server 2005 大大地扩展了 XML 组合(SELECT ... FOR XML 语句)的功能,扩展了 OpenXML() XML 分解函数,并针对 XML 数据类型提供了一个新的 nodes() 函数以进行更轻量级的分解。

既然对数据库服务器增强了此新的 XML 功能,那么对 Microsoft ADO.NET 2.0 中的 SqlClient 数据提供程序也进行增强就不会令人感到惊奇了。对 ADO.NET DataSet 也有更改,以便支持类型 XMLDataColumn,而且 System.DataSystem.Xml 之间的“集成点”得到了拓宽。在本文中,我将探究在客户端上使用 SQL Server 2005 XML 数据类型。

SQL Server 2005 可以产生两类 XML 输出。语句 SELECT * FROM AUTHORS FOR XML AUTO 产生 XML 流,而不是一列一行的行集。该输出类型与 SQL Server 2000 中的输出类型相比没有改变。只是因为查询分析器工具中的限制,XML 流输出在 SQL Server 查询分析器中才显示为一列一行的行集。您可以通过其特定的唯一标识符名称“XML_F52E2B61-18A1-11d1-B105-000805F49916B”来将这种流与“普通”列区分开来。此名称实际上是底层 TDS(这是一种表格式的数据流,SQL Server 网络格式)分析器的指示器,在这种分析器中,列应该流至客户端,而不是像普通行集那样发送。有一种特殊的方法 SqlCommand.ExecuteXmlReader 用来在客户端上检索此特殊的流。在 SQL Server 2005 中,SELECT ... FOR XML 语句通过许多方式得到了增强。这里仅提少数几种:

1.

在大多数情况下,当您需要 SQL Server 2000 中的 FOR XML EXPLICIT 模式时,有一种新的、便于使用的 FOR XML PATH 模式。

2.

使用 TYPE 指令,除了生成流之外,您还可以生成 XML 数据类型列。

3.

可以嵌套 FOR XML 表达式。

4.

SELECT ... FOR XML 可以使用 ROOT 指令生成 XML 文档以及 XML 片段。

5.

您可以将标准的 XSD 架构预先挂起到流。

通过引用 ADO.NET 2.0 中的关系 datatype 枚举,您可以初步了解到 XML 是一种一流的关系数据库类型。System.Data.DbTypeSystem.Data.SqlDbType 分别包含 DbType.XmlSqlDbType.Xml 的附加值。在 System.Data.SqlTypes 命名空间中也有一个新的类,它是 SqlXml。这个类充当 XML 类型值的 XmlReader 实例工厂。我将通过一些简单的代码进行展示。假设我有一份 SQL Server 表,如下所示:

CREATE TABLE xmltab (
  id INT IDENTITY PRIMARY KEY,
  xmlcol XML)

我可以使用以下 ADO.NET 2.0 代码在客户端上访问此表。

using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using System.Xml;

void GetXMLColumn {
// "Generic Coding..." article for shows how to
// get a connection string from a config file
string s = GetConnectStringFromConfigFile("xmldb");
using (SqlConnection conn = new SqlConnection(s))
using (SqlCommand cmd = new SqlCommand(
       "select * from xmltab", conn))
 {
  conn.Open();
  SqlDataReader rdr = cmd.ExecuteReader();
  DataTable t = rdr.GetSchemaTable();

  while (rdr.Read())
    {
      SqlXml sx = rdr.GetSqlXml(1);
      XmlReader xr = sx.CreateReader();
      xr.Read(); 
      Console.WriteLine(xr.ReadOuterXml());
    }
 }
}

我浏览 GetSchemaTable 产生的 DataTable 时返回的列元数据正确地标识了列:

ProviderType: 25 (25 = XML)
ProviderSpecificDataType: System.Data.SqlTypes.SqlXml
DataType: System.Xml.XmlReader
DataTypeName:

正如任何其他构建到 SQL Server 中的类型一样。请注意,此列的“.NET 类型”是 XmlReader,对于 .NET 而言,它就像任何从文件加载或用 XmlDocument 类产生的 XML 一样。在 ADO.NET 2.0 中的存储过程或参数化语句中将 XML 数据类型列用作参数同样简单:

using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using System.Xml;

void AddARow {
// get a connection string from a config file
string s = GetConnectStringFromConfigFile("xmldb");
using (SqlConnection conn = new SqlConnection(s))
using (SqlCommand cmd = new SqlCommand(
       "insert xmltab(xmlcol) VALUES(@x)", conn))
 {
  conn.Open();
  cmd.Parameters.Add("@x", SqlDbType.Xml);

  // connect the parameter value to a file
  XmlReader xr = XmlReader.Create("somexml.xml");
  cmd.Parameters[0].Value = new SqlXml(xr);
  int i = cmd.ExecuteNonQuery();
 }
}

共5页: 1 [2] [3] [4] [5] 下一页
【内容导航】
发表
查看
我也说两句

匿名发表

(如果看不清请点击图片进行更换)


中 国 领 先 的 IT 技 术 网 站 ·
技 术 成 就 梦 想
·SQL Server入门到精通 (查看49847次)
·SQL Server 2005全解 (查看45978次)
·Oracle数据库开发指南 (查看29526次)
·Oracle SQL 内置函数大全 (查看27518次)
·MySQL数据库备份 (查看23309次)
订阅技术快讯
电子杂志下载
名称:网络安全精品应用黄皮书
简介:《2007精品网络安全黄皮书》包括了9个大类24个小类, 800余篇文章,内容包含了熊猫烧香病毒、DDOS攻击、ARP病等热点问题的介绍及解决方案。从病毒查杀、防范、系统、数据等各方面的安全设置到黑客技术的了解、防范,涉及到了安全应用的全部领域, 由浅至深内容全面。
名称:Vista精品应用黄皮书
简介:《Vista精品应用黄皮书》囊括了Vista的各方面内容。此次的精简版,是将里面的内容做了提取,便于用户下载和使用。内容包含了各种Vista的安装与实施、技巧与解析以及各种Vista相关学习文档和相关软件的安全下载。该电子书是了解和应用Vista人员必备的工具手册,并且也是第一本
名称:2006中国IT论坛精品集合
简介:本书由“51CTO论坛推广联盟”制作完成。书中所有内容均来自各联盟成员的论坛(网站)。制作本书的目的是为了集中大家的优势资源,将更多更精彩的内容带给广大技术爱好者。本书是联盟成立以来制作的第一本书。
关键字阅读
频道精选
主编信箱 热线:010-66476606 告诉我们您想看的:专题 文章