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 客户端访问的代码需要适当地改变进程内访问。

 

  1. using System;  
  2. using System.Xml;  
  3. using System.Data;  
  4. using System.Data.SqlTypes;  
  5. using System.Data.SqlServer;  
  6.  
  7. class xmldtADONETReadAccessInProc  
  8. {  
  9.    static void ReadXmlDataType () {  
  10.       // in-proc connection to server  
  11.       SqlConnection conn = SqlContext.GetConnection();  
  12.  
  13.       // prepare query to select xml data  
  14.       SqlCommand cmd = conn.CreateCommand();  
  15.       cmd.CommandText = "SELECT xCol FROM docs";  
  16.  
  17.       // execute query and retrieve incoming data  
  18.       SqlDataReader r = cmd.ExecuteReader();  
  19.       r.Read();  
  20.  
  21.       // access XML data type field in rowset  
  22.       SqlXml xml = r.GetSqlXml(0);  
  23.       new XmlTextWriter(Console.Out).WriteNode(   
  24. xml.CreateReader(), true);  
  25.    }  
  26. }  

例:使用 SQL 客户端提供程序更新 XML 数据类型列

下面的代码所显示的 WriteXmlDaraType () 方法使用 SQL 客户端程序提供程序来替换 XML 列中的值。用于进程内提供程序的代码是相似的。

 

  1. using System;  
  2. using System.Xml;  
  3. using System.Data;  
  4. using System.Data.SqlTypes;  
  5. using System.Data.SqlClient;  
  6.  
  7. class xmldtADONETUpdateAccess  
  8. {  
  9.    static void WriteXmlDataType () {  
  10.       // connection to server  
  11.       SqlConnection conn = new SqlConnection("server=server1;" +  
  12. " database=XMLtest; Integrated Security=SSPI");  
  13.       conn.Open();  
  14.  
  15.    // update XML column at the server  
  16.    SqlCommand cmd = conn.CreateCommand();  
  17.    cmd.CommandText = "UPDATE docs SET xCol=@x WHERE id=1";  
  18.  
  19. // set value of XML parameter  
  20.    SqlParameter p = cmd.Parameters.Add("@x", SqlDbType.Xml);  
  21. p.Value = new SqlXml(new XmlTextReader("<hello/>",   
  22. XmlNodeType.Document, null));  
  23.  
  24. // execute update and close connection  
  25.    cmd.ExecuteNonQuery();  
  26. conn.Close();  
  27. }  
  28. }