Condividi tramite


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.

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

Vedi anche

Riferimento API ODBC
File di intestazione ODBC