Funzione SQLExecute
Conformità
Versione introdotta: Conformità agli standard ODBC 1.0: ISO 92
Riepilogo
SQLExecute esegue un'istruzione preparata, usando i valori correnti delle variabili dell'indicatore di parametro se nell'istruzione sono presenti marcatori di parametro.
Sintassi
SQLRETURN SQLExecute(
SQLHSTMT StatementHandle);
Argomenti
StatementHandle
[Input] Handle di istruzione.
Valori restituiti
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_NEED_DATA, SQL_STILL_EXECUTING, SQL_ERROR, SQL_NO_DATA, SQL_INVALID_HANDLE o SQL_PARAM_DATA_AVAILABLE.
Diagnostica
Quando SQLExecute 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 comunemente restituiti da SQLExecute 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. |
01001 | Conflitto dell'operazione di cursore | L'istruzione preparata associata all'istruzione StatementHandle conteneva un'istruzione di aggiornamento o eliminazione posizionata e nessuna riga o più righe sono state aggiornate o eliminate. Per altre informazioni sugli aggiornamenti a più righe, vedere la descrizione del SQL_ATTR_SIMULATE_CURSOR Attributo in SQLSetStmtAttr.) (La funzione restituisce SQL_SUCCESS_WITH_INFO. |
01003 | Valore NULL eliminato nella funzione set | L'istruzione preparata associata a StatementHandle conteneva una funzione set (ad esempio AVG, MAX, MIN e così via), ma non la funzione set COUNT e i valori di argomento NULL sono stati eliminati prima dell'applicazione della funzione. (La funzione restituisce SQL_SUCCESS_WITH_INFO. |
01004 | Dati stringa, troncati a destra | I dati stringa o binari restituiti per un parametro di output hanno comportato il troncamento di dati binari non null o non NULL. Se si tratta di un valore stringa, è stato troncato a destra. (La funzione restituisce SQL_SUCCESS_WITH_INFO. |
01006 | Privilegio non revocato | L'istruzione preparata associata a StatementHandle è un'istruzione REVOKE e l'utente non dispone del privilegio specificato. (La funzione restituisce SQL_SUCCESS_WITH_INFO. |
01007 | Privilegio non concesso | L'istruzione preparata associata a StatementHandle era un'istruzione GRANT e l'utente non poteva concedere il privilegio specificato. |
01S02 | Valore dell'opzione modificato | Un attributo di istruzione specificato non è valido a causa delle condizioni di lavoro dell'implementazione, pertanto è stato sostituito temporaneamente un valore simile. È possibile chiamare SQLGetStmtAttr per determinare il valore sostituito temporaneamente. Il valore sostitutivo è valido per StatementHandle fino a quando il cursore non viene chiuso, a quel punto l'attributo dell'istruzione ripristina il valore precedente. Gli attributi dell'istruzione che possono essere modificati sono: SQL_ATTR_CONCURRENCY, SQL_ATTR_CURSOR_TYPE, SQL_ATTR_KEYSET_SIZE, SQL_ATTR_MAX_LENGTH, SQL_ATTR_MAX_ROWS, SQL_ATTR_QUERY_TIMEOUT e SQL_ATTR_SIMULATE_CURSOR. (La funzione restituisce SQL_SUCCESS_WITH_INFO. |
01S07 | Troncamento frazionario | I dati restituiti per un parametro di input/output o di output sono stati troncati in modo che la parte frazionaria di un tipo di dati numerico sia stata troncata o la parte frazionaria del componente temporale di un tipo di dati time, timestamp o interval è stata troncata. (La funzione restituisce SQL_SUCCESS_WITH_INFO. |
07002 | Campo COUNT errato | Il numero di parametri specificati in SQLBindParameter è minore del numero di parametri nell'istruzione SQL contenuta in *StatementText. SQLBindParameter è stato chiamato con ParameterValuePtr impostato su un puntatore Null, StrLen_or_IndPtr non impostato su SQL_NULL_DATA o SQL_DATA_AT_EXEC e InputOutputType non è impostato su SQL_PARAM_OUTPUT, in modo che il numero di parametri specificati in SQLBindParameter sia maggiore del numero di parametri nell'istruzione SQL contenuta in *StatementText. |
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 sono state restituite una o più righe, questa funzione restituisce SQL_SUCCESS_WITH_INFO. |
07007 | Violazione del valore del parametro con restrizioni | Il tipo di parametro SQL_PARAM_INPUT_OUTPUT_STREAM viene usato solo per un parametro che invia e riceve i dati in parti. Un buffer associato all'input non è consentito per questo tipo di parametro. Questo errore si verifica quando il tipo di parametro è SQL_PARAM_INPUT_OUTPUT e quando il *StrLen_or_IndPtr specificato in SQLBindParameter non è uguale a SQL_NULL_DATA, SQL_DEFAULT_PARAM, SQL_LEN_DATA_AT_EXEC(len) o SQL_DATA_AT_EXEC. |
07S01 | Uso non valido del parametro predefinito | Un valore del parametro, impostato con SQLBindParameter, è stato SQL_DEFAULT_PARAM e il parametro corrispondente non era un parametro per una chiamata a una routine canonica ODBC. |
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. |
21S02 | Il grado di tabella derivata non corrisponde all'elenco di colonne | L'istruzione preparata associata all'istruzione StatementHandle conteneva un'istruzione CREATE VIEW e l'elenco di colonne non qualificato (il numero di colonne specificate per la vista negli argomenti dell'identificatore di colonna dell'istruzione SQL) conteneva più nomi rispetto al numero di colonne nella tabella derivata definita dall'argomento query-specification dell'istruzione SQL. |
22001 | Dati stringa, troncamento destro | L'assegnazione di un carattere o di un valore binario a una colonna ha comportato il troncamento di caratteri o byte non null (carattere). |
22002 | Variabile indicatore obbligatoria ma non fornita | I dati NULL sono stati associati a un parametro di output il cui StrLen_or_IndPtr impostato da SQLBindParameter era un puntatore Null. |
22003 | Valore numerico non compreso nell'intervallo | L'istruzione preparata associata a StatementHandle conteneva un parametro numerico associato e il valore del parametro causava il troncamento dell'intera parte del numero, anziché frazionaria, quando assegnata alla colonna della tabella associata. La restituzione di un valore numerico (come numerico o stringa) per uno o più parametri di input/output o output avrebbe causato il troncamento dell'intera parte (anziché frazionaria) del numero. |
22007 | Formato datetime non valido | L'istruzione preparata associata a StatementHandle conteneva un'istruzione SQL contenente una struttura di data, ora o timestamp come parametro associato e il parametro era, rispettivamente, una data, un'ora o un timestamp non valido. Un parametro di input/output o di output è stato associato a una struttura di data, ora o timestamp C e un valore nel parametro restituito era, rispettivamente, una data, un'ora o un timestamp non validi. (La funzione restituisce SQL_SUCCESS_WITH_INFO. |
22008 | Overflow del campo Datetime | L'istruzione preparata associata a StatementHandle conteneva un'istruzione SQL contenente un'espressione datetime che, quando calcolata, generava una struttura di data, ora o timestamp non valida. Un'espressione datetime calcolata per un parametro di input/output o di output ha generato una struttura C di data, ora o timestamp non valida. |
22012 | Divisione per zero | L'istruzione preparata associata a StatementHandle contiene un'espressione aritmetica che ha causato la divisione per zero. Un'espressione aritmetica calcolata per un parametro di input/output o di output ha generato una divisione per zero. |
22015 | Overflow del campo intervallo | *StatementText conteneva un parametro numerico o intervallo esatto che, quando convertito in un tipo di dati SQL intervallo, causava una perdita di cifre significative. *StatementText conteneva un parametro interval con più di un campo che, quando convertito in un tipo di dati numerico in una colonna, non aveva rappresentazione nel tipo di dati numerico. *StatementText conteneva i dati dei parametri assegnati a un tipo SQL di intervallo e non c'era alcuna rappresentazione del valore del tipo C nel tipo SQL intervallo. L'assegnazione di un parametro di input/output o di output che era un tipo SQL numerico o intervallo esatto a un tipo C intervallo ha causato una perdita di cifre significative. Quando un parametro di input/output o di output è stato assegnato a una struttura interval C, non è presente alcuna rappresentazione dei dati nella struttura dei dati interval. |
22018 | Valore carattere non valido per la specifica del cast | *StatementText conteneva un tipo C che era un valore numerico esatto o approssimativo, un tipo di dati datetime o interval, il tipo SQL della colonna era un tipo di dati carattere e il valore nella colonna non era un valore letterale valido del tipo C associato. Quando è stato restituito un parametro di input/output o di output, il tipo SQL era un tipo di dati numerico esatto o approssimativo, un valore datetime o un tipo di dati interval; il tipo C era SQL_C_CHAR; e il valore nella colonna non era un valore letterale valido del tipo SQL associato. |
22019 | Carattere di escape non valido | L'istruzione preparata associata a StatementHandle conteneva un predicato LIKE con un escape nella clausola WHERE e la lunghezza del carattere di escape che segue ESCAPE non era uguale a 1. |
22025 | Sequenza di escape non valida | L'istruzione preparata associata a StatementHandle conteneva il carattere di escape "LIKE pattern value ESCAPE" nella clausola WHERE e il carattere che segue il carattere di escape nel valore del criterio non era uno di "%" o "_". |
23000 | Violazione del vincolo di integrità | L'istruzione preparata associata a StatementHandle conteneva un parametro . Il valore del parametro era NULL per una colonna definita come NOT NULL nella colonna della tabella associata, per una colonna vincolata a contenere solo valori univoci è stato specificato un valore duplicato oppure è stato violato un altro vincolo di integrità. |
24000 | Stato del cursore non valido | Un cursore è stato posizionato in StatementHandle da SQLFetch o SQLFetchScroll. Questo errore viene restituito da Gestione driver se SQLFetch o SQLFetchScroll non ha restituito SQL_NO_DATA e viene restituito dal driver se SQLFetch o SQLFetchScroll ha restituito SQL_NO_DATA. Un cursore è stato aperto in StatementHandle. L'istruzione preparata associata all'istruzione StatementHandle contiene un'istruzione di aggiornamento o eliminazione posizionata e il cursore è stato posizionato prima dell'inizio del set di risultati o dopo la fine del set di risultati. |
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. |
42000 | Errore di sintassi o violazione di accesso | L'utente non dispone dell'autorizzazione per eseguire l'istruzione preparata associata a StatementHandle. |
44000 | Violazione della clausola WITH CHECK OPTION | L'istruzione preparata associata a StatementHandle contiene un'istruzione INSERT eseguita su una tabella visualizzata o una tabella derivata dalla tabella visualizzata creata specificando WITH CHECK OPTION, in modo che una o più righe interessate dall'istruzione INSERT non siano più presenti nella tabella visualizzata. L'istruzione preparata associata a StatementHandle conteneva un'istruzione UPDATE eseguita in una tabella visualizzata o in una tabella derivata dalla tabella visualizzata creata specificando WITH CHECK OPTION, in modo che una o più righe interessate dall'istruzione UPDATE non saranno più presenti nella tabella visualizzata. |
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 di completare l'esecuzione, SQLCancel o SQLCancelHandle è stata chiamata in 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) È 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 SQLExecute . (DM) SQLExecute, SQLExecDirect o SQLMoreResults è stato chiamato per StatementHandle e restituito SQL_PARAM_DATA_AVAILABLE. Questa funzione è stata chiamata prima del recupero dei dati per tutti i parametri trasmessi. (DM) Una funzione in esecuzione asincrona (non questa) è stata chiamata per StatementHandle ed è ancora in esecuzione quando questa funzione è stata chiamata. (DM) SQLExecute, SQLExecDirect, SQLBulkOperations o SQLSetPos è stato chiamato per StatementHandle e restituito SQL_NEED_DATA. Questa funzione è stata chiamata prima dell'invio dei dati per tutti i parametri o le colonne data-at-execution. (DM) StatementHandle non è stato preparato. |
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. |
HY090 | Lunghezza della stringa o del buffer non valida | Un valore del parametro, impostato con SQLBindParameter, è un puntatore Null e il valore della lunghezza del parametro non è 0, SQL_NULL_DATA, SQL_DATA_AT_EXEC, SQL_DEFAULT_PARAM o minore o uguale a SQL_LEN_DATA_AT_EXEC_OFFSET. Un valore del parametro, impostato con SQLBindParameter, non era un puntatore Null, il tipo di dati C era SQL_C_BINARY o SQL_C_CHAR e il valore della lunghezza del parametro era minore di 0, ma non era SQL_NTS, SQL_NULL_DATA, SQL_DEFAULT_PARAM o SQL_DATA_AT_EXEC o minore o uguale a SQL_LEN_DATA_AT_EXEC_OFFSET. Un valore di lunghezza del parametro associato a SQLBindParameter è stato impostato su SQL_DATA_AT_EXEC; il tipo SQL era SQL_LONGVARCHAR, SQL_LONGVARBINARY o un tipo di dati specifico dell'origine dati lungo e il tipo di informazioni SQL_NEED_LONG_DATA_LEN in SQLGetInfo era "Y". |
HY105 | Tipo di parametro non valido | Il valore specificato per l'argomento InputOutputType in SQLBindParameter è stato SQL_PARAM_OUTPUT e il parametro era un parametro di input. |
HY109 | Posizione del cursore non valida | L'istruzione preparata è un'istruzione di aggiornamento o eliminazione posizionata e il cursore è stato posizionato (da SQLSetPos o SQLFetchScroll) in una riga eliminata o che non è stato possibile recuperare. |
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. |
HYC00 | Funzionalità facoltativa non implementata | La combinazione delle impostazioni correnti degli attributi delle istruzioni SQL_ATTR_CONCURRENCY e SQL_ATTR_CURSOR_TYPE non è supportata dal driver o dall'origine dati. L'attributo di istruzione SQL_ATTR_USE_BOOKMARKS è stato impostato su SQL_UB_VARIABLE e l'attributo dell'istruzione SQL_ATTR_CURSOR_TYPE è stato impostato su un tipo di cursore per cui il driver non supporta i segnalibri. |
HYT00 | Timeout scaduto | Periodo di timeout della query scaduto prima che l'origine dati restituisca il set di risultati. Il periodo di timeout viene impostato tramite SQLSetStmtAttr, SQL_ATTR_QUERY_TIMEOUT. |
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 associato 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. |
SQLExecute può restituire qualsiasi SQLSTATE che può essere restituito da SQLPrepare, in base a quando l'origine dati valuta l'istruzione SQL associata all'istruzione .
Commenti
SQLExecute esegue un'istruzione preparata da SQLPrepare. Dopo che l'applicazione elabora o rimuove i risultati da una chiamata a SQLExecute, l'applicazione può chiamare di nuovo SQLExecute con nuovi valori di parametro. Per altre informazioni sull'esecuzione preparata, vedere Esecuzione preparata.
Per eseguire un'istruzione SELECT più volte, l'applicazione deve chiamare SQLCloseCursor prima di eseguire nuovamente l'istruzione SELECT .
Se l'origine dati è in modalità di commit manuale (che richiede l'avvio esplicito della transazione) e una transazione non è già stata avviata, il driver avvia una transazione prima di inviare l'istruzione SQL. Per altre informazioni, vedere Transazioni.
Se un'applicazione usa SQLPrepare per preparare e SQLExecute per inviare un'istruzione COMMIT o ROLLBACK , non sarà interoperabile tra i prodotti DBMS. Per eseguire il commit o il rollback di una transazione, chiamare SQLEndTran.
Se SQLExecute rileva un parametro data-at-execution, restituisce SQL_NEED_DATA. L'applicazione invia i dati usando SQLParamData e SQLPutData. Vedere SQLBindParameter, SQLParamData, SQLPutData e Invio di dati lunghi.
Se SQLExecute esegue un'istruzione di aggiornamento, inserimento o eliminazione ricercata che non influisce sulle righe nell'origine dati, la chiamata a SQLExecute restituisce SQL_NO_DATA.
Se il valore dell'attributo dell'istruzione SQL_ATTR_PARAMSET_SIZE è maggiore di 1 e l'istruzione SQL contiene almeno un marcatore di parametro, SQLExecute esegue l'istruzione SQL una volta per ogni set di valori di parametro nelle matrici a cui punta l'argomento *ParameterValuePtr nelle chiamate a SQLBindParameter. Per altre informazioni, vedere Matrici di valori dei parametri.
Se i segnalibri sono abilitati e viene eseguita una query che non supporta i segnalibri, il driver deve tentare di comerare l'ambiente a uno che supporta i segnalibri modificando un valore di attributo e restituendo SQLSTATE 01S02 (valore opzione modificato). Se l'attributo non può essere modificato, il driver deve restituire SQLSTATE HY024 (valore attributo non valido).
Nota
Quando si usa il pool di connessioni, un'applicazione non deve eseguire istruzioni SQL che modificano il database o il contesto del database, ad esempio l'istruzione USE database in SQL Server, che modifica il catalogo usato da un'origine dati.
Esempio di codice
Vedere SQLBindParameter, SQLBulkOperations, SQLPutData e SQLSetPos.
Funzioni correlate
Per informazioni su | Vedere |
---|---|
Associazione di un buffer a una colonna in un set di risultati | Funzione SQLBindCol |
Annullamento dell'elaborazione delle istruzioni | Funzione SQLCancel |
Chiusura del cursore | Funzione SQLCloseCursor |
Esecuzione di un'operazione di commit o rollback | Funzione SQLEndTran |
Esecuzione di un'istruzione SQL | Funzione SQLExecDirect |
Recupero di più righe di dati | Funzione SQLFetch |
Recupero di un blocco di dati o scorrimento di un set di risultati | Funzione SQLFetchScroll |
Liberare un handle di istruzione | Funzione SQLFreeStmt |
Restituzione di un nome di cursore | Funzione SQLGetCursorName |
Recupero di una parte o di una colonna di dati | Funzione SQLGetData |
Restituzione del parametro successivo per l'invio di dati per | Funzione SQLParamData |
Preparazione di un'istruzione per l'esecuzione | Funzione SQLPrepare |
Invio dei dati dei parametri in fase di esecuzione | Funzione SQLPutData |
Impostazione di un nome di cursore | Funzione SQLSetCursorName |
Impostazione di un attributo di istruzione | Funzione SQLSetStmtAttr |