Condividi tramite


Parametri dei comandi

I parametri sono contrassegnati nel testo dei comandi dal carattere del punto interrogativo. L'istruzione SQL seguente è ad esempio contrassegnata per un solo 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 deduce automaticamente le informazioni sui parametri, a meno che non venga chiamata ICommandWithParameters::GetParameterInfo o ICommandPrepare::Prepare prima di eseguire un comando. In altre parole, il provider OLE DB di SQL Server Native Client non esegue automaticamente le operazioni seguenti:

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

  • Eseguire il mapping tra il valore DBTYPE specificato nelle informazioni relative all'associazione della funzione di accesso e il tipo di dati di SQL Server corretto per il parametro.

Se si specificano tipi di dati non compatibili con il tipo di dati di SQL Server del parametro, è possibile che vengano ricevuti errori o che si verifichi una perdita della precisione con entrambi i metodi.

Per evitare che ciò si verifichi, è necessario:

  • Assicurarsi che pwszDataSourceType corrisponda al tipo di dati di SQL Server per il parametro se si specifica ICommandWithParameters::SetParameterInfo a livello di codice.

  • Assicurarsi che il valore DBTYPE associato al parametro sia dello stesso tipo del tipo di dati SQL Server per il parametro in caso di specifica di una funzione di accesso a livello di codice.

  • Codificare l'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 ciò determina un round trip aggiuntivo del server.

Nota

Il provider non supporta la chiamata a ICommandWithParameters::GetParameterInfo per le istruzioni UPDATE o DELETE di SQL Server contenenti una clausola FROM, per le istruzioni SQL dipendenti da una sottoquery contenente parametri, per le istruzioni SQL che contengono indicatori di parametro in entrambi le espressioni di un predicato quantificato, di confronto o LIKE o per le query in cui uno dei parametri è il parametro di una funzione. In caso di elaborazione di un batch di istruzioni SQL, il provider non supporta inoltre la chiamata a ICommandWithParameters::GetParameterInfo per gli indicatori di parametro nelle istruzioni dopo la prima istruzione del 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 delle istruzioni SQL. Nei comandi delle chiamate a procedure il provider OLE DB di SQL Server Native Client supporta parametri di input, di output e di input/output. I valori dei parametri di output vengono restituiti all'applicazione in fase di 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, utilizzare IMultipleResults per applicare l'utilizzo dei set di righe.

I nomi dei parametri delle stored procedure non devono essere specificati in una struttura DBPARAMBINDINFO. Utilizzare 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 deve utilizzare solo l'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 quelli denominati.

Se si specifica il nome di un parametro di stored procedure, il provider OLE DB di SQL Server Native Client ne verifica la validità. Il provider OLE DB di SQL Server Native Client restituisce un errore quando riceve un nome di parametro errato dal consumer.

Nota

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

Vedere anche

Concetti