执行包含 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