Condividi tramite


Parametri di comando

I parametri sono contrassegnati nel testo del comando con il carattere punto interrogativo. Ad esempio, l'istruzione SQL seguente è contrassegnata per un singolo parametro di input:

{call SalesByCategory('Produce', ?)}  

Per migliorare le prestazioni riducendo il traffico di rete, il provider OLE DB di SQL Server Native Client non deriva automaticamente le informazioni sui parametri a meno che non venga chiamato ICommandWithParameters::GetParameterInfo o ICommandPrepare::P repare prima di eseguire un comando. Ciò significa che il provider OLE DB di SQL Server Native Client non esegue automaticamente:

  • Verificare la correttezza del tipo di dati specificato con ICommandWithParameters::SetParameterInfo.

  • Eseguire il mapping da DBTYPE specificato nelle informazioni sull'associazione della funzione di accesso al tipo di dati di SQL Server corretto per il parametro .

Le applicazioni riceveranno possibili errori o perdita di precisione con uno di questi metodi se specificano tipi di dati non compatibili con il tipo di dati di SQL Server del parametro.

Per assicurarsi che ciò non accada, l'applicazione deve:

  • Assicurarsi che pwszDataSourceType corrisponda al tipo di dati di SQL Server per il parametro se ICommandWithParameters::SetParameterInfo hardcoded ICommandWithParameters::SetParameterInfo.

  • Assicurarsi che il valore DBTYPE associato al parametro sia dello stesso tipo del tipo di dati di SQL Server per il parametro se si imposta come hardcoded una funzione di accesso.

  • Scrivere il codice dell'applicazione per chiamare ICommandWithParameters::GetParameterInfo in modo che il provider possa ottenere dinamicamente i tipi di dati di SQL Server dei parametri. Si noti che in questo modo viene generato un round trip di rete aggiuntivo al server.

Annotazioni

Il provider non supporta la chiamata a ICommandWithParameters::GetParameterInfo per qualsiasi istruzione SQL Server UPDATE o DELETE contenente una clausola FROM; per qualsiasi istruzione SQL a seconda di una sottoquery contenente parametri; per istruzioni SQL contenenti marcatori di parametro in entrambe le espressioni di un confronto, ad esempio o predicato quantificato; o query in cui uno dei parametri è un parametro di una funzione. Quando si elabora un batch di istruzioni SQL, il provider non supporta anche la chiamata a ICommandWithParameters::GetParameterInfo per i marcatori di parametro nelle istruzioni dopo la prima istruzione nel batch. I commenti (/* */) non sono consentiti nel comando Transact-SQL.

Il provider OLE DB di SQL Server Native Client supporta i parametri di input nei comandi dell'istruzione SQL. Nei comandi di chiamata di routine, il provider OLE DB di SQL Server Native Client supporta parametri di input, output e input/output. I valori dei parametri di output vengono restituiti all'applicazione durante l'esecuzione (solo se non sono stati restituiti set di righe) o quando tutti i set di righe restituiti vengono esauriti dall'applicazione. Per assicurarsi che i valori restituiti siano validi, usare IMultipleResults per forzare l'utilizzo del set di righe.

I nomi dei parametri della stored procedure non devono essere specificati in una struttura DBPARAMBINDINFO. Usare NULL per il valore del membro pwszName per indicare che il provider OLE DB di SQL Server Native Client deve ignorare il nome del parametro e usare solo il numero ordinale specificato nel membro rgParamOrdinals di ICommandWithParameters::SetParameterInfo. Se il testo del comando contiene parametri denominati e senza nome, tutti i parametri senza nome devono essere specificati prima di qualsiasi parametro denominato.

Se viene specificato il nome di un parametro di stored procedure, il provider OLE DB di SQL Server Native Client controlla il nome per assicurarsi che sia valido. Il provider OLE DB di SQL Server Native Client restituisce un errore quando riceve un nome di parametro errato dal consumer.

Annotazioni

Per esporre il supporto per i tipi XML e definiti dall'utente (UDT), il provider OLE DB di SQL Server Native Client implementa una nuova interfaccia ISSCommandWithParameters .

Vedere anche

Comandi