在应用程序中使用 XML 数据类型

本主题介绍在应用程序中使用 xml 数据类型时可用的选项。本主题包括有关下列操作的信息:

  • 使用 ADO 和 SQL Server Native Client 处理 xml 类型列中的 XML

  • 使用 ADO.NET 处理 xml 类型列中的 XML

  • 使用 ADO.NET 处理参数中的 xml 类型

使用 ADO 和 SQL Server Native Client 处理 xml 类型列中的 XML

若要使用 MDAC 组件访问 SQL Server 2005 中引入的类型和功能,必须在 ADO 连接字符串中设置 DataTypeCompatibility 初始化属性。

例如,下面的 Visual Basic Scripting Edition (VBScript) 示例显示了在 AdventureWorks2008R2 示例数据库的 Sales.Store 表中查询 xml 数据类型列 Demographics 的结果。具体来讲,查询将为 CustomerID 等于 3 的行查找此列的实例值。

Const DS = "MyServer"
Const DB = "AdventureWorks2008R2"

Set objConn = CreateObject("ADODB.Connection")
Set objRs = CreateObject("ADODB.Recordset")

CommandText = "SELECT Demographics" & _
              " FROM Sales.Store" & _
              " INNER JOIN Sales.Customer" & _
              " ON Sales.Store.BusinessEntityID = sales.customer.StoreID" & _
              " WHERE Sales.Customer.CustomerID = 3" & _
              " OR Sales.Customer.CustomerID = 4"
                   
ConnectionString = "Provider=SQLNCLI10" & _
                   ";Data Source=" & DS & _
                   ";Initial Catalog=" & DB & _
                   ";Integrated Security=SSPI;" & _
                   "DataTypeCompatibility=80"

'Connect to the data source.
objConn.Open ConnectionString

'Execute command through the connection and display
Set objRs = objConn.Execute(CommandText)

Dim rowcount
rowcount = 0
Do While Not objRs.EOF
   rowcount = rowcount + 1
   MsgBox "Row " & rowcount & _
           vbCrLf & vbCrLf & objRs(0)
   objRs.MoveNext
Loop

'Clean up.
objRs.Close
objConn.Close
Set objRs = Nothing
Set objConn = Nothing

此示例显示了如何设置数据类型兼容性属性。默认情况下,使用 SQL Server Native Client 时它设置为 0。将该值设置为 80 后,SQL Server Native Client 访问接口将使 xml 和用户定义类型列显示为 SQL Server 2000 数据类型。结果将分别是 DBTYPE_WSTR 和 DBTYPE_BYTES。

还必须在客户端计算机上安装 SQL Server Native Client,并且连接字符串必须通过“Provider=SQLNCLI10;...”指定将它用作数据访问接口。

测试此示例

  1. 验证客户端计算机上是否安装了 SQL Server Native Client 以及是否有 MDAC 2.6.0 或更高版本可用。

    有关详细信息,请参阅SQL Server 2008 R2 Native Client 编程

  2. 确定安装了 SQL Server 中的 AdventureWorks2008R2 示例数据库。

    此示例需要 AdventureWorks2008R2 示例数据库。有关详细信息,请参阅安装 SQL Server 示例和示例数据库的注意事项

  3. 将本主题前面显示的代码复制并粘贴到文本编辑器或代码编辑器中。将文件另存为 HandlingXmlDataType.vbs。

  4. 根据 SQL Server 安装的需要修改脚本并保存更改。

    例如,如果指定了 MyServer,应将其替换为 (local) 或安装 SQL Server 的服务器的实际名称。

  5. 运行 HandlingXmlDataType.vbs 并执行脚本。

结果应与以下示例输出相似:

Row 1

<StoreSurvey xmlns="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/StoreSurvey">
  <AnnualSales>1500000</AnnualSales>
  <AnnualRevenue>150000</AnnualRevenue>
  <BankName>Primary International</BankName>
  <BusinessType>OS</BusinessType>
  <YearOpened>1974</YearOpened>
  <Specialty>Road</Specialty>
  <SquareFeet>38000</SquareFeet>
  <Brands>3</Brands>
  <Internet>DSL</Internet>
  <NumberEmployees>40</NumberEmployees>
</StoreSurvey>

Row 2

<StoreSurvey xmlns="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/StoreSurvey">
  <AnnualSales>300000</AnnualSales>
  <AnnualRevenue>30000</AnnualRevenue>
  <BankName>United Security</BankName>
  <BusinessType>BM</BusinessType>
  <YearOpened>1976</YearOpened>
  <Specialty>Road</Specialty>
  <SquareFeet>6000</SquareFeet>
  <Brands>2</Brands>
  <Internet>DSL</Internet>
  <NumberEmployees>5</NumberEmployees>
</StoreSurvey>

使用 ADO.NET 处理 xml 类型列中的 XML

若要使用 ADO.NET 和 Microsoft .NET Framework 处理 xml 数据类型列中的 XML,可以使用 SqlCommand 类的标准行为。例如,可以按照使用 SqlDataReader 检索任何 SQL 列的相同方法检索 xml 数据类型列及其值。但是,如果要将 xml 数据类型列的内容作为 XML 使用,必须先将这些内容指派给 XmlReader 类型。

有关详细信息和示例代码,请参阅 Microsoft .NET Framework 2.0 SDK 文档中的“数据读取器中的 XML 列值”。

使用 ADO.NET 处理参数中的 xml 类型列

若要处理 ADO.NET 和 .NET Framework 中作为参数传递的 xml 数据类型,可以将参数值作为 SqlXml 数据类型的实例来提供。这里不涉及任何特殊的处理,因为 SQL Server 中的 xml 数据类型列可按照与其他列和数据类型(如 string 或 integer)相同的方式接受参数值。

有关详细信息和示例代码,请参阅 Microsoft .NET Framework 2.0 SDK 文档中的“作为命令参数的 XML 值”。

请参阅

概念