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 ClientSideXMLestá definida como True, a instrução SELECT sem a cláusula FOR XML será 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 de XML fornece um único elemento raiz de nível superior (<ROOT>) para o documento XML gerado; portanto, a propriedade xml root não é fornecida.
Para executar modelos de XML, o dialeto {5d531cb2-e6ed-11d2-b252-00c04f681b71} deve ser especificado.
Observação |
---|
No código, é necessário fornecer o nome da instância do SQL Server na cadeia de conexão. Este exemplo também especifica o uso do SQL Server Native Client (SQLNCLI10) para o provedor de dados, o que requer a instalação adicional do software cliente da rede. Para obter mais informações, consulte Requisitos de sistema do SQL Server 2008 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