WEB开发网
开发学院数据库MSSQL Server 从 SQL Server 2005 中处理 XML 阅读

从 SQL Server 2005 中处理 XML

 2007-05-13 09:26:22 来源:WEB开发网   
核心提示: 您可以像在以前的版本中一样,使用 ExecuteXmlReader 从“FOR XML”查询中检索任何流,从 SQL Server 2005 中处理 XML(7),另外,此方法支持对普通 SELECT 语句生成的 XML 数据类型列进行检索,当您使用 Execute

您可以像在以前的版本中一样,使用 ExecuteXmlReader 从“FOR XML”查询中检索任何流。另外,此方法支持对普通 SELECT 语句生成的 XML 数据类型列进行检索。这里唯一需要提请您注意的是,当普通 SELECT 语句返回多行时,ExecuteXmlReader 仅返回第一行的内容。这里的示例使用与先前示例中相同的表展示了这一点:

using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using System.Xml;
void UseExecXmlReader {
// get a connection string from a config file
string s = GetConnectStringFromConfigFile("xmldb");
using (SqlConnection conn = new SqlConnection(s))
using (SqlCommand cmd1 = new SqlCommand(
    "select * from pubs..authors for xml auto,root('root')", conn))
using (SqlCommand cmd2 = new SqlCommand(
    "select * from pubs..authors for xml auto", conn))
using (SqlCommand cmd3 = new SqlCommand(
    "select * from xmltab", conn))
{
 conn.Open();
 // contains document
 XmlReader xr1 = cmd1.ExecuteXmlReader();
 // contains fragment
 XmlReader xr2 = cmd2.ExecuteXmlReader();
 // contains contents of first row in xmltab only
 XmlReader xr3 = cmd3.ExecuteXmlReader();
 // use XmlReaders, then
 xr1.Dispose(); xr2.Dispose(); xr3.Dispose();
}
}

为了完成关于在 ADO.NET 2.0 中获取 XML 的讨论,在各种使用方案中提到 XmlReader 内容的生命周期是有好处的。研究 XmlReader 的生命周期还有助于理解 SqlClient 执行的缓冲,以及如何使用此数据获取最高性能。XmlReader 使用资源,为了释放这些资源,应该调用 Close() 或 Dispose() 方法,就像使用 SqlConnection、SqlCommand 和 SqlDataReader 一样。在通过 SqlDataReader 读取 XML 列的情况下,可以为每一行分配一个 XmlReader。请记住,为了支持在同一行的列中向后移动,或者移动到下一行,XmlReader 的内容要在内存中缓冲。当您使用 SqlCommand 的 CommandBehavior.SequentialAccess 时,整个 XmlReader 不会在内存中缓冲,但您使用此存取方法时必须小心。使用 CommandBehavior.SequentialAccess 时,与列相关联的 XmlReader 在行集中移动到下一列之前必须完全消耗掉;在移动到下一列之后,XmlReader 看似有效,但调用它的 Read() 方法不会产生任何数据。当您使用 ExecuteXmlReader 或 ExecuteScalar 代替 ExecuteReader 时,您无需同样多的了解此行为,但此时也别忘了关闭/处理 XmlReader。

上一页  2 3 4 5 6 7 8 9 10  下一页

Tags:SQL Server 处理

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接