Executando modelos que contêm consultas SQL (provedor SQLXMLOLEDB)
Este exemplo ilustra o uso da propriedade específica do provedor SQLXMLOLEDB ClientSideXML. Nesse aplicativo de exemplo de ADO do lado cliente, um modelo XML que consiste em uma consulta SQL é executado no servidor.
Como a propriedade ClientSideXML está definida como True, a instrução SELECT sem a cláusula FOR XML é enviada ao servidor. O servidor executa a consulta e retorna um conjunto de linhas para o cliente. O cliente aplica a transformação de FOR XML ao conjunto de linhas e produz um documento XML.
O modelo XML fornece um único elemento raiz de nível superior (<ROOT>) para o documento XML gerado; portanto, a propriedade raiz xml não é fornecida.
Para executar modelos de XML, o dialeto {5d531cb2-e6ed-11d2-b252-00c04f681b71} deve ser especificado.
Observação
No código, você deve fornecer o nome da instância do SQL Server na cadeia de conexão. Além disso, este exemplo especifica o uso do SQL Server Native Client (SQLNCLI11) para o provedor de dados que exige a instalação de software cliente de rede adicional. Para obter mais informações, consulte Requisitos do sistema para 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