Funzione SQLParamData
Conformità
Versione introdotta: Conformità agli standard ODBC 1.0: ISO 92
Riepilogo
SQLParamData viene usato insieme a SQLPutData per fornire i dati dei parametri in fase di esecuzione dell'istruzione e con SQLGetData per recuperare i dati dei parametri di output trasmessi.
Sintassi
SQLRETURN SQLParamData(
SQLHSTMT StatementHandle,
SQLPOINTER * ValuePtrPtr);
Argomenti
StatementHandle
[Input] Handle di istruzione.
ValuePtrPtr
[Output] Puntatore a un buffer in cui restituire l'indirizzo del buffer ParameterValuePtr specificato in SQLBindParameter (per i dati dei parametri) o l'indirizzo del buffer TargetValuePtr specificato in SQLBindCol (per i dati della colonna), come contenuto nel campo del record del descrittore SQL_DESC_DATA_PTR.
Valori restituiti
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_NEED_DATA, SQL_NO_DATA, SQL_STILL_EXECUTING, SQL_ERROR, SQL_INVALID_HANDLE o SQL_PARAM_DATA_AVAILABLE.
Diagnostica
Quando SQLParamData restituisce SQL_ERROR o SQL_SUCCESS_WITH_INFO, è possibile ottenere un valore SQLSTATE associato chiamando SQLGetDiagRec con handleType di SQL_HANDLE_STMT e handle di StatementHandle. La tabella seguente elenca i valori SQLSTATE restituiti in genere da SQLParamData e ne spiega ognuno nel contesto di questa funzione. La notazione "(DM)" precede le descrizioni di SQLSTATEs restituite da Gestione driver. Il codice restituito associato a ogni valore SQLSTATE è SQL_ERROR, a meno che non sia specificato diversamente.
SQLSTATE | Errore | Descrizione |
---|---|---|
01000 | Avviso generale | Messaggio informativo specifico del driver. (La funzione restituisce SQL_SUCCESS_WITH_INFO. |
07006 | Violazione dell'attributo del tipo di dati con restrizioni | Impossibile convertire il valore dei dati identificato dall'argomento ValueType in SQLBindParameter per il parametro associato nel tipo di dati identificato dall'argomento ParameterType in SQLBindParameter. Impossibile convertire il valore di dati restituito per un parametro associato come SQL_PARAM_INPUT_OUTPUT o SQL_PARAM_OUTPUT nel tipo di dati identificato dall'argomento ValueType in SQLBindParameter. Se non è stato possibile convertire i valori di dati per una o più righe, ma una o più righe sono state restituite correttamente, questa funzione restituisce SQL_SUCCESS_WITH_INFO. |
08S01 | Errore del collegamento di comunicazione | Collegamento di comunicazione tra il driver e l'origine dati a cui è stato connesso il driver non è riuscito prima del completamento dell'elaborazione della funzione. |
22026 | Lunghezza dei dati non corrispondente. | Il tipo di informazioni SQL_NEED_LONG_DATA_LEN in SQLGetInfo era "Y" e meno dati sono stati inviati per un parametro long (il tipo di dati è stato SQL_LONGVARCHAR, SQL_LONGVARBINARY o un tipo di dati lungo specifico dell'origine dati) rispetto a quello specificato con l'argomento StrLen_or_IndPtr in SQLBindParameter. Il tipo di informazioni SQL_NEED_LONG_DATA_LEN in SQLGetInfo era "Y" e meno dati sono stati inviati per una colonna lunga (il tipo di dati è stato SQL_LONGVARCHAR, SQL_LONGVARBINARY o un tipo di dati specifico dell'origine dati lungo) rispetto a quello specificato nel buffer di lunghezza corrispondente a una colonna in una riga di dati aggiunti o aggiornati con SQLBulkOperations o aggiornati con SQLSetPos. |
40001 | Errore di serializzazione | È stato eseguito il rollback della transazione a causa di un deadlock della risorsa con un'altra transazione. |
40003 | Completamento istruzione sconosciuto | La connessione associata non è riuscita durante l'esecuzione di questa funzione e non è possibile determinare lo stato della transazione. |
HY000 | Errore generale: | Si è verificato un errore per il quale non è stato specificato SQLSTATE e per il quale non è stato definito alcun SQLSTATE specifico dell'implementazione. Il messaggio di errore restituito da SQLGetDiagRec nel buffer *MessageText descrive l'errore e la relativa causa. |
HY001 | Errore di allocazione della memoria | Il driver non è riuscito ad allocare memoria necessaria per supportare l'esecuzione o il completamento della funzione. |
HY008 | Operazione annullata | L'elaborazione asincrona è stata abilitata per StatementHandle. La funzione è stata chiamata e prima del completamento dell'esecuzione, SQLCancel o SQLCancelHandle è stata chiamata su StatementHandle. La funzione è stata quindi chiamata di nuovo in StatementHandle. La funzione è stata chiamata e prima del completamento dell'esecuzione, SQLCancel o SQLCancelHandle è stato chiamato su StatementHandle da un thread diverso in un'applicazione multithread. |
HY010 | Errore della sequenza di funzioni | (DM) La chiamata di funzione precedente non era una chiamata a SQLExecDirect, SQLExecute, SQLBulkOperations o SQLSetPos in cui il codice restituito era SQL_NEED_DATA oppure la chiamata di funzione precedente era una chiamata a SQLPutData. La chiamata di funzione precedente è stata una chiamata a SQLParamData. (DM) È stata chiamata una funzione in esecuzione asincrona per l'handle di connessione associato a StatementHandle. Questa funzione asincrona era ancora in esecuzione quando è stata chiamata la funzione SQLParamData . (DM) Una funzione in esecuzione asincrona (non questa) è stata chiamata per StatementHandle ed è ancora in esecuzione quando questa funzione è stata chiamata. SQLExecute, SQLExecDirect, SQLBulkOperations o SQLSetPos è stato chiamato per StatementHandle e restituito SQL_NEED_DATA. SQLCancel è stato chiamato prima dell'invio dei dati per tutti i parametri o le colonne data-at-execution. |
HY013 | Errore di gestione della memoria | Impossibile elaborare la chiamata di funzione perché non è stato possibile accedere agli oggetti di memoria sottostanti, probabilmente a causa di condizioni di memoria insufficiente. |
HY117 | La connessione viene sospesa a causa dello stato sconosciuto della transazione. Sono consentite solo funzioni disconnesse e di sola lettura. | (DM) Per altre informazioni sullo stato sospeso, vedere Funzione SQLEndTran. |
HYT01 | Il timeout della connessione è scaduto | Periodo di timeout della connessione scaduto prima che l'origine dati rispondesse alla richiesta. Il periodo di timeout della connessione viene impostato tramite SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT. |
IM001 | Il driver non supporta questa funzione | (DM) Il driver che corrisponde a StatementHandle non supporta la funzione. |
IM017 | Il polling è disabilitato in modalità di notifica asincrona | Ogni volta che viene usato il modello di notifica, il polling è disabilitato. |
IM018 | SQLCompleteAsync non è stato chiamato per completare l'operazione asincrona precedente su questo handle. | Se la chiamata di funzione precedente sull'handle restituisce SQL_STILL_EXECUTING e se la modalità di notifica è abilitata, è necessario chiamare SQLCompleteAsync sull'handle per eseguire la post-elaborazione e completare l'operazione. |
Se SQLParamData viene chiamato durante l'invio di dati per un parametro in un'istruzione SQL, può restituire qualsiasi SQLSTATE che può essere restituito dalla funzione chiamata per eseguire l'istruzione (SQLExecute o SQLExecDirect). Se viene chiamato durante l'invio di dati per una colonna da aggiornare o aggiungere con SQLBulkOperations o in fase di aggiornamento con SQLSetPos, può restituire qualsiasi SQLSTATE che può essere restituito da SQLBulkOperations o SQLSetPos.
Commenti
SQLParamData può essere chiamato per fornire dati in fase di esecuzione per due usi: dati dei parametri che verranno usati in una chiamata a SQLExecute o SQLExecDirect o dati di colonna che verranno usati quando una riga viene aggiornata o aggiunta da una chiamata a SQLBulkOperations o aggiornata da una chiamata a SQLSetPos. In fase di esecuzione, SQLParamData torna all'applicazione un indicatore dei dati richiesti dal driver.
Quando un'applicazione chiama SQLExecute, SQLExecDirect, SQLBulkOperations o SQLSetPos, il driver restituisce SQL_NEED_DATA se sono necessari dati in fase di esecuzione. Un'applicazione chiama quindi SQLParamData per determinare quali dati inviare. Se il driver richiede i dati dei parametri, il driver restituisce nel buffer di output *ValuePtrPtr il valore inserito dall'applicazione nel buffer del set di righe. L'applicazione può usare questo valore per determinare i dati dei parametri richiesti dal driver. Se il driver richiede dati di colonna, il driver restituisce nel buffer *ValuePtrPtr l'indirizzo a cui è stata originariamente associata la colonna, come indicato di seguito:
Offset binding di indirizzi + associati + ((numero di riga - 1) x dimensioni elemento)
dove le variabili sono definite come indicato nella tabella seguente.
Variabile | Descrizione |
---|---|
Indirizzo associato | Indirizzo specificato con l'argomento TargetValuePtr in SQLBindCol. |
Offset di associazione | Valore archiviato nell'indirizzo specificato con l'attributo dell'istruzione SQL_ATTR_ROW_BIND_OFFSET_PTR. |
Numero di riga | Numero in base 1 della riga nel set di righe. Per i recuperi a riga singola, ovvero l'impostazione predefinita, si tratta di 1. |
Dimensioni elemento | Valore dell'attributo di istruzione SQL_ATTR_ROW_BIND_TYPE per i buffer di dati e di lunghezza/indicatore. |
Restituisce anche SQL_NEED_DATA, che è un indicatore all'applicazione che deve chiamare SQLPutData per inviare i dati.
L'applicazione chiama SQLPutData quante volte necessario per inviare i dati in fase di esecuzione per la colonna o il parametro . Dopo l'invio di tutti i dati per la colonna o il parametro, l'applicazione chiama di nuovo SQLParamData . Se SQLParamData restituisce di nuovo SQL_NEED_DATA, i dati devono essere inviati per un altro parametro o colonna. Pertanto, l'applicazione chiama di nuovo SQLPutData. Se tutti i dati di dati in fase di esecuzione sono stati inviati per tutti i parametri o le colonne, SQLParamData restituisce SQL_SUCCESS o SQL_SUCCESS_WITH_INFO, il valore in *ValuePtrPtr non è definito e l'istruzione SQL può essere eseguita oppure è possibile elaborare la chiamata SQLBulkOperations o SQLSetPos .
Se SQLParamData fornisce i dati dei parametri per un'istruzione di aggiornamento o eliminazione ricercata che non influisce sulle righe nell'origine dati, la chiamata a SQLParamData restituisce SQL_NO_DATA.
Per altre informazioni sul passaggio dei dati dei parametri di esecuzione in fase di esecuzione dell'istruzione, vedere "Passaggio dei valori dei parametri" in SQLBindParameter e Invio di dati lunghi. Per altre informazioni sull'aggiornamento o l'aggiunta dei dati delle colonne di esecuzione dei dati, vedere la sezione "Uso di SQLSetPos" in SQLSetPos, "Esecuzione di aggiornamenti in blocco tramite segnalibri" in SQLBulkOperations e SQLSetPos e SQLBulkOperations.
È possibile chiamare SQLParamData per recuperare i parametri di output trasmessi. Quando SQLMoreResults, SQLExecute, SQLGetData o SQLExecDirect restituisce SQL_PARAM_DATA_AVAILABLE, chiamare SQLParamData per determinare quale parametro ha un valore disponibile. Per altre informazioni sui parametri di output SQL_PARAM_DATA_AVAILABLE e trasmessi, vedere Recupero di parametri di output tramite SQLGetData.
Esempio di codice
Vedere SQLPutData.
Funzioni correlate
Per informazioni su | Vedere |
---|---|
Associazione di un buffer a un parametro | Funzione SQLBindParameter |
Annullamento dell'elaborazione delle istruzioni | Funzione SQLCancel |
Restituzione di informazioni su un parametro in un'istruzione | Funzione SQLDescribeParam |
Esecuzione di un'istruzione SQL | Funzione SQLExecDirect |
Esecuzione di un'istruzione SQL preparata | Funzione SQLExecute |
Invio dei dati dei parametri in fase di esecuzione | Funzione SQLPutData |
Vedi anche
Riferimento API ODBC
File di intestazione ODBC
Recupero di parametri di output tramite SQLGetData