Flussi di comandi

ADO ha sempre supportato l'input del comando in formato stringa specificato dalla proprietà CommandText. In alternativa, con ADO 2.7 o versione successiva, è anche possibile usare un flusso di informazioni per l'input del comando assegnando il flusso alla proprietà CommandStream. È possibile assegnare un oggetto ADO Stream o qualsiasi oggetto che supporti l'interfaccia COM IStream.

Il contenuto del flusso di comandi viene semplicemente passato da ADO al provider, quindi il provider deve supportare l'input del comando in base al flusso per consentire il funzionamento di questa funzionalità. Ad esempio, SQL Server supporta le query sotto forma di modelli XML o estensioni OpenXML in Transact-SQL.

Poiché i dettagli del flusso devono essere interpretati dal provider, è necessario specificare il dialetto del comando impostando la proprietà Dialect. Il valore di Dialect è una stringa contenente un GUID, definito dal provider. Per informazioni sui valori validi di Dialect supportati dal provider, vedere la documentazione del provider.

Esempio di query modello XML

L'esempio seguente è scritto in VBScript nel database Northwind.

Innanzitutto, inizializzare e aprire l'oggetto Stream che verrà usato per contenere il flusso di query:

Dim adoStreamQuery  
Set adoStreamQuery = Server.CreateObject("ADODB.Stream")  
adoStreamQuery.Open  

Il contenuto del flusso di query sarà una query modello XML.

La query modello richiede un riferimento allo spazio dei nomi XML identificato dal prefisso sql: del tag <sql:query>. Un'istruzione SQL SELECT viene inclusa come contenuto del modello XML e assegnata a una variabile stringa come indicato di seguito:

sQuery = "<ROOT xmlns:sql='urn:schemas-microsoft-com:xml-sql'>  
<sql:query> SELECT * FROM PRODUCTS ORDER BY PRODUCTNAME </sql:query>  
</ROOT>"  

Scrivere quindi la stringa nel flusso:

adoStreamQuery.WriteText sQuery, adWriteChar  
adoStreamQuery.Position = 0  

Assegnare adoStreamQuery alla proprietà CommandStream di un oggetto ADO Command:

Dim adoCmd  
Set adoCmd  = Server.CreateObject("ADODB.Command"")  
adoCmd.CommandStream = adoStreamQuery  

Specificare il valore Dialect della lingua del comando, che indica come il provider OLE DB per SQL Server deve interpretare il flusso di comandi. Dialetto specificato da un GUID specifico del provider:

adoCmd.Dialect = "{5D531CB2-E6Ed-11D2-B252-00C04F681B71}"  

Infine, eseguire la query e restituire i risultati a un oggetto Recordset:

Set objRS = adoCmd.Execute