四、SQL Server 2005 中的客户端 XML 处理
XML 数据类型的客户端支持.NET 框架 V2.0 中的 ADO.NET XML 支持在 SqlDataReader.GetSqlXml() 方法的 System.Data.SqlTypes 命名空间中,XML 数据类型是作为类 SqlXml 公开的。可以使用 SqlXml.CreateReader() 函数从 SqlXml 对象获得 XmlReader。
类型化 XML 列的 XML 架构集合的名称由三部分组成,可以从 XML 列的元数据中获得(通过使用 SqlDataReader 对象中的 GetSchemaTable() 或 GetSqlMetaData (int)),其三个部分作为三个属性,分别表示数据库 (XmlSchemaCollectionDatabase)、关系架构 (XmlSchemaCollectionOwingSchema) 和 XML 架构集合 (XmlSchemaCollectionName) 的名称。
客户端可以使用新的架构行集 XMLSCHEMA 从服务器检索 XML 架构。XMLSCHEMA 行集包含 XML 架构集合、目标命名空间和 XML 架构内容本身这样三列。
下面的示例显示了用于对 XML 数据类型进行托管访问的主干代码。
例:对 XML 数据类型进行进程内访问
下面的 C# 代码演示了如何从进程内提供程序访问 XML 数据类型。用于 SQL 客户端访问的代码需要适当地改变进程内访问。
using System;
using System.Xml;
using System.Data;
using System.Data.SqlTypes;
using System.Data.SqlServer;
class xmldtADONETReadAccessInProc
{
static void ReadXmlDataType () {
// in-proc connection to server
SqlConnection conn = SqlContext.GetConnection();
// prepare query to select xml data
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = "SELECT xCol FROM docs";
// execute query and retrieve incoming data
SqlDataReader r = cmd.ExecuteReader();
r.Read();
// access XML data type field in rowset
SqlXml xml = r.GetSqlXml(0);
new XmlTextWriter(Console.Out).WriteNode(
xml.CreateReader(), true);
}
}
例:使用 SQL 客户端提供程序更新 XML 数据类型列