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

此示例演示如何使用特定于 SQLXMLOLEDB 提供程序的属性 ClientSideXML。 在此客户端 ADO 示例应用程序中,将在服务器上执行包含 SQL 查询的 XML 模板。

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

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

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

注释

在代码中,必须在连接字符串中提供 SQL Server 实例的名称。 此外,此示例指定对需要安装其他网络客户端软件的数据提供程序使用 SQL Server Native Client (SQLNCLI11)。 有关详细信息,请参阅 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=SQLNCLI11;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