执行包含 SQL 查询的模板(SQLXMLOLEDB 访问接口)

此示例说明特定于 SQLXMLOLEDB 访问接口的属性 ClientSideXML 的用法。在此客户端 ADO 示例应用程序中,在服务器上执行包含一个 SQL 查询的 XML 模板。

由于 ClientSideXML 属性设置为 True,因此会将不含 FOR XML 子句的 SELECT 语句发送到服务器。服务器执行该查询并将一个行集返回给客户端。然后客户端对行集应用 FOR XML 转换,并生成 XML 文档。

XML 模板为所生成的 XML 文档提供一个顶级根元素 (<ROOT>);因此不提供 xml root 属性。

若要执行 XML 模板,必须指定方言 {5d531cb2-e6ed-11d2-b252-00c04f681b71}。

注意注意

在该代码中,必须在连接字符串中提供 SQL Server 实例的名称。而且,此示例指定对于需要安装其他网络客户端软件的数据访问接口使用 SQL Server Native Client (SQLNCLI10)。有关详细信息,请参阅 SQL Server Native Client 的系统要求

Option Explicit

Sub Main()
  Dim oTestStream As New ADODB.Stream
  Dim oTestConnection As New ADODB.Connection
  Dim oTestCommand As New ADODB.Command
  oTestConnection.Open "Provider=SQLXMLOLEDB.4.0;Data Provider=SQLNCLI10;Data Source=SqlServerName;Initial Catalog=AdventureWorks;Integrated Security=SSPI;"

  Set oTestCommand.ActiveConnection = oTestConnection
  oTestCommand.Properties("ClientSideXML") = True
  oTestCommand.CommandText = "<ROOT xmlns:sql='urn:schemas-microsoft-com:xml-sql'> " & _
        " <sql:query> " & _
        "   SELECT TOP 10 FirstName, LastName FROM Person.Contact FOR XML AUTO " & _
        "   </sql:query> " & _
        " </ROOT> "
  oTestStream.Open
  ' You need the dialect if you are executing 
  ' XML templates (not for SQL queries).
  oTestCommand.Dialect = "{5d531cb2-e6ed-11d2-b252-00c04f681b71}"
  oTestCommand.Properties("Output Stream").Value = oTestStream
  oTestCommand.Execute , , adExecuteStream

  oTestStream.Position = 0
  oTestStream.Charset = "utf-8"
  Debug.Print oTestStream.ReadText(adReadAll)
End Sub

Sub Form_Load()
  Main
End Sub