Fluxos de comando
O ADO sempre deu suporte à entrada de comando no formato de cadeia de caracteres especificado pela propriedade CommandText. Como alternativa, com o ADO 2.7 ou posterior, você também pode usar um fluxo de informações para entrada de comando atribuindo o fluxo à propriedade CommandStream. Você pode atribuir um objeto ADO Stream ou qualquer objeto que dê suporte à interface COM IStream.
O conteúdo do fluxo de comandos é simplesmente passado do ADO para o provedor, ou seja, seu provedor precisa dar suporte à entrada de comando por fluxo para que esse recurso funcione. Por exemplo, o SQL Server dá suporte a consultas na forma de modelos XML ou extensões OpenXML para Transact-SQL.
Como os detalhes do fluxo precisam ser interpretados pelo provedor, você precisa especificar o dialeto de comando definindo a propriedade Dialect. O valor de Dialect é uma cadeia de caracteres que contém um GUID, que é definido pelo provedor. Para saber mais sobre valores válidos de Dialect com suporte do provedor, confira a documentação do provedor.
Exemplo de consulta de modelo XML
O exemplo a seguir foi escrito em VBScript no banco de dados Northwind.
Primeiro, inicialize e abra o objeto Stream que será usado para conter o fluxo de consulta:
Dim adoStreamQuery
Set adoStreamQuery = Server.CreateObject("ADODB.Stream")
adoStreamQuery.Open
O conteúdo do fluxo de consulta será uma consulta de modelo XML.
A consulta de modelo requer uma referência ao namespace XML identificado pelo prefixo sql: da marca <sql:query>. Uma instrução SQL SELECT é incluída como o conteúdo do modelo XML e atribuída a uma variável de cadeia de caracteres da seguinte maneira:
sQuery = "<ROOT xmlns:sql='urn:schemas-microsoft-com:xml-sql'>
<sql:query> SELECT * FROM PRODUCTS ORDER BY PRODUCTNAME </sql:query>
</ROOT>"
Em seguida, escreva a cadeia de caracteres no fluxo:
adoStreamQuery.WriteText sQuery, adWriteChar
adoStreamQuery.Position = 0
Atribua adoStreamQuery à propriedade CommandStream de um objeto Command do ADO:
Dim adoCmd
Set adoCmd = Server.CreateObject("ADODB.Command"")
adoCmd.CommandStream = adoStreamQuery
Especifique o Dialect da linguagem de comando, que indica como o provedor OLE DB SQL Server deve interpretar o fluxo de comando. O dialeto especificado por um GUID específico do provedor:
adoCmd.Dialect = "{5D531CB2-E6Ed-11D2-B252-00C04F681B71}"
Por fim, execute a consulta e retorne os resultados para um objeto Recordset:
Set objRS = adoCmd.Execute