• ----:)欢迎访问源码网(:----
    • 首页
    • 博客
    • 学院
    • 下载
    • 论坛
    • 影视
    • 发布源码
    • RSS
    • ITPig
    • 笑话网
    • 百家姓
    • 繁體中文

源码网 - 中国第一源码门户
选择镜像:网通镜像 - 电信主站
  • 首 页
  • 新闻动态
  • 网站运营
  • 网页制作
  • WEB开发
  • 编程开发
  • 图像媒体
  • 操作系统
  • 数据库
  • 服务器
热门搜索 优化 SEO 故事 cms IIS7 MySQL 个人 AdSense 主题推广 | 文章搜索: 高级搜索
会员登录/控制面版您的位置: 学院首页 >> 数据库 >> MSSQL >> 详细内容
 

推荐文章

  • SQL数据库的备份、压缩与SQL数据库数据处理的方法
  • 压缩SQL数据库
 
 

热点文章

  • 安装SQL Server 2005实例环境图解
  • SQL数据库的备份、压缩与SQL数据库数据处理的方法
  • SQL SERVER 2005数据库镜像
  • SQL数据库还原出现错误112(磁盘空间不足)的解决办法
  • Server 2005性能排错
  • 在SQL Server中的关系型数据仓库分区策略
  • 如何使用SQL Server 2000中的XML功能
  • 压缩SQL数据库
  • SQL Server 2000中的SQL语言简介
  • SQLServer删除日志方法
  • SQL精妙语句
  • SQL Server 2000中的SQL语言简介(一)
 
 

相关文章

  • SQL Server 2000中全文检索的使用
  • SQL Server 2000中生成XML的技巧
  • 创建SQL Server 2000故障转移群集
  • SQL Server 2000中的SQL语言简介(一)
  • SQL Server 2000中的SQL语言简介
 
 

百度搜索

 
 

如何使用SQL Server 2000中的XML功能

  • 阅览次数:
  • 文章来源:
  • 原文作者:
  • 整理日期: 2007-04-06
  • 发表评论
  • 字体大小:
  • 小
  • 中
  • 大

通过ADO.NET返回XML



在提供的可下载的示例代码中还包含了一个用于运行某些代码示例(如图 4所示)的ASP.NET项目。该项目示例使用一个叫做GetFORXML的方法,该方法运行任何SQL时都附带一个FOR XML子句,并将得到的XML写到一个文件。为简单起见,该XML还被包装在一个<root>元素中。

 



图 5所示的GetFORXML方法代码说明了如何使用标准SqlCommand对象来执行包含FOR XML子句的SQL语句。这里使用了ExecuteXmlReader方法,因此可以将XML作为一个XmlReader对象返回。数据集的ReadXml方法接受XmlReader,其第二个参数表明该XML是一个片段。

private string GetFORXML(string sFile, string sSQL) {

// Create和open the connection to Northwind

using(SqlConnection oCn = new SqlConnection(this.sCnNW)) {

oCn.Open();

// Create the SQL command to execute

SqlCommand oCmd = new SqlCommand(sSQL, oCn);

DataSet oDs = new DataSet();

// Execute the SQL statement and return the data to an XmlReader.

// Then read the schema and the fragment

XmlReader oXml = oCmd.ExecuteXmlReader();

oDs.ReadXmlSchema(oXml);

oDs.ReadXml(oXml, XmlReadMode.Fragment);

oCn.Close();

oDs.DataSetName = "root";

oDs.WriteXml(this.sPath + sFile);

return "Wrote XML to file " + sFile;

}

}

图 5 使用XmlTextReader遍历XML



因为它是一个片段,所以如果它有一个用于匹配的架构,则只加载所有的Customer节点。因此在加载XML之前,先使用ReadXmlSchema方法加载该架构(在这种情况下需要推理)。最后,将该数据集的DataSetName属性设置为“root”,这样将得到封闭在一个父标记<root/>中的读XML。

图 4中的ASP.NET页能够执行和输出前面已经研究过的例子的XML,也能够使用FOR XML RAW, BINARY BASE64获取员工数据 。此外,通过使用以下子句,它还能够执行和输出XML,获取客户和定单数据:

 FOR XML RAW

 FOR XML AUTO

 FOR XML AUTO, ELEMENTS

 FOR XML AUTO, ELEMENTS, XMLDATA

使用FOR XML限制

FOR XML AUTO和FOR XML RAW 对返回二进制数据都不提供完全支持。例如,若选择一个二进制字段(比如 Employees.Photo列)并使用FOR XML RAW,则会收到一条难以处理的错误消息。避免这种情况的一种方法是将一个URL返给二进制数据字段。这就需要首先在IIS中建立一个SQL Server虚拟目录。另一种方法不需要进行IIS配置,它是在FOR XML子句中指定BINARY BASE64选项,如以下代码所示:

SELECT EmployeeID, FirstName, LastName, Photo

FROM Employees

WHERE LastName LIKE 'D%'

FOR XML RAW,BINARY BASE64

这样SQL Server就会使用BASE64格式来格式化二进制数据。其优点是SQL语句将不再改变。缺点是读取使用BINARY BASE64的查询结果不方便。下面的XML是使用BINARY BASE64时所返回的结果的一个例子。这里削减了Photo属性的内容,因为其长度超过了14,000个字符!

<row EmployeeID="1" FirstName="Nancy"

LastName="Davolio" Photo="FRw...f4="/>

FOR XML AUTO模式的另一个限制是它不支持GROUP BY子句或聚合函数。不过,可以通过选择若干行、构成TABLE变量,然后使用FOR XML AUTO子句从该中间表中检索这些行来避开这种限制。下面的SQL代码即可完成这一任务:

DECLARE @TempTable TABLE (OrderID INT, Total MONEY)

INSERT INTO @TempTable

SELECT OrderID, SUM(UnitPrice * Quantity) AS Total

FROM [Order Details]

GROUP BY OrderID

SELECT OrderID, Total FROM @TempTable AS OrderDetails FOR XML AUTO


[1] [2] [3] [4] [5]

上一篇:比AcdSee功能还强大的图片处理、编辑软件,推荐下载!
下一篇:ASP上传漏洞防范
  • 网友评论:
  • 查看所有评论
  • 我要发表评论
您的网名:
留言主题:
你要发表的内容:

 

关于本站 | 广告联系 | 版权声明 | 网站地图 | 发布软件 | 帮助中心 | 源码论坛

Copyright © 2005-2007 CodePub.Com  程序支持:木翼  滇ICP备05005971号