Funzione SQLCancelHandle
conformità
Versione introdotta: Conformità agli standard ODBC 3.8: Nessuno
È previsto che la maggior parte dei driver ODBC 3.8 (e versioni successive) implementi questa funzione. Se un driver non lo fa, Una chiamata a
riepilogo
SQLCancelHandle annulla l'elaborazione in una connessione o un'istruzione . Gestione driver esegue il mapping di una chiamata a SQLCancelHandle a una chiamata a SQLCancel quando handleType è SQL_HANDLE_STMT.
Sintassi
SQLRETURN SQLCancelHandle(
SQLSMALLINT HandleType,
SQLHANDLE Handle);
Argomenti
HandleType
[Input] Tipo dell'handle su cui annullare l'elaborazione. I valori validi sono SQL_HANDLE_DBC o SQL_HANDLE_STMT.
handle
[Input] Handle su cui annullare l'elaborazione.
Se Handle non è un handle valido del tipo specificato da HandleType, SQLCancelHandle restituisce SQL_INVALID_HANDLE.
Rendiconto
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR o SQL_INVALID_HANDLE.
Diagnostica
Quando
La tabella seguente elenca i valori SQLSTATE comunemente restituiti da SQLCancelHandle e 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. |
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 nell'argomento *MessageText buffer 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. |
HY010 | Errore della sequenza di funzioni | È stata chiamata una funzione correlata all'istruzione in modo asincrono per uno degli handle di istruzione associati all'Handlee HandleType è stato impostato su SQL_HANDLE_DBC. La funzione asincrona era ancora in esecuzione quando è stata chiamata SQLCancelHandle. (DM) L'argomento HandleType (DM) SQLBrowseConnect è stato chiamato per ConnectionHandlee restituito SQL_NEED_DATA. Questa funzione è stata chiamata prima del completamento del processo di esplorazione. |
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. |
HY092 | Identificatore di attributo/opzione non valido | HandleType è stato impostato su SQL_HANDLE_ENV o SQL_HANDLE_DESC. |
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 | Timeout 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 al Handle non supporta la funzione. |
Se SQLCancelHandle viene chiamato con HandleType impostato su SQL_HANDLE_STMT, può restituire qualsiasi SQLSTATE che può essere restituito dalla funzione SQLCancel.
Commenti
Questa funzione è simile a SQLCancel, ma può accettare una connessione o un handle di istruzione come parametro anziché solo un handle di istruzione. Gestione driver esegue il mapping di una chiamata a SQLCancelHandle a una chiamata a SQLCancel quando handleType è SQL_HANDLE_STMT. Ciò consente alle applicazioni di usare SQLCancelHandle per annullare le operazioni di istruzione anche se il driver non implementa SQLCancelHandle.
Per altre informazioni sull'annullamento di un'operazione di istruzione, vedere funzione SQLCancel.
Se non sono in corso operazioni su Handle la chiamata a SQLCancelHandle non ha alcun effetto.
SQLCancelHandle in un handle di connessione può annullare i tipi di elaborazione seguenti:
Funzione in esecuzione in modo asincrono sulla connessione.
Funzione in esecuzione sull'handle di connessione in un altro thread.
Quando SQLCancelHandle viene chiamato per annullare una funzione in esecuzione in modo asincrono in una connessione, i record di diagnostica pubblicati da SQLCancelHandle vengono aggiunti a quelli restituiti dall'operazione annullata; sqlCancelHandle non restituisce record di diagnostica, tuttavia, quando si annulla una funzione in esecuzione su una connessione in un altro thread.
L'uso di SQLCancelHandle per annullare SQLEndTran potrebbe mettere la connessione in stato sospeso. Per altre informazioni sullo stato sospeso, vedere funzione SQLEndTran.
Nota
Per informazioni su come usare SQLCancelHandle in un'applicazione che verrà distribuita in un sistema operativo Windows precedente a Windows 7, vedere Matrice di compatibilità.
Annullamento dell'elaborazione asincrona di Connection-Related
Se una funzione restituisce SQL_STILL_EXECUTING, un'applicazione può chiamare SQLCancelHandle per annullare l'operazione. Se la richiesta di annullamento ha esito positivo, SQLCancelHandle restituisce SQL_SUCCESS. Ciò non significa che la funzione originale è stata annullata; indica che la richiesta di annullamento è stata elaborata. Il driver e l'origine dati determinano quando o se l'operazione viene annullata. L'applicazione deve continuare a chiamare la funzione originale finché il codice restituito non è SQL_STILL_EXECUTING. Se la funzione originale è stata annullata, il codice restituito viene SQL_ERROR e SQLSTATE HY008 (operazione annullata). Se la funzione originale ha completato la normale elaborazione (non è stata annullata), il codice restituito viene SQL_SUCCESS o SQL_SUCCESS_WITH_INFO oppure SQL_ERROR e sqlSTATE diverso da HY008 (operazione annullata), se la funzione originale non è riuscita.
Annullamento delle funzioni in esecuzione in un altro thread
In un'applicazione multithread l'applicazione può annullare un'operazione in esecuzione in un altro thread. Per annullare l'operazione, l'applicazione chiama SQLCancelHandle con l'handle usato dalla funzione, ma in un thread diverso. Il driver e il sistema operativo determinano la modalità di annullamento dell'operazione. Il codice restituito SQLCancelHand le indica se il driver ha elaborato la richiesta, restituendo SQL_SUCCESS o SQL_ERROR (non vengono restituite informazioni di diagnostica). Se l'elaborazione nella funzione originale viene annullata, la funzione originale restituisce SQL_ERROR e SQLSTATE HY008 (operazione annullata).
Se viene eseguita una funzione quando SQLCancelHandle viene chiamata su un altro thread per annullare la funzione, è possibile che la funzione abbia esito positivo e restituisca SQL_SUCCESS prima che l'annullamento possa essere effettivo. Una chiamata a SQLCancelHandle non ha alcun effetto se l'operazione è stata completata prima di SQLCancelHandle è stata in grado di annullare l'operazione.
Funzioni correlate
Per informazioni su | Vedere |
---|---|
Annullamento di una funzione in esecuzione in modo asincrono su un handle di istruzione, annullamento di una funzione in un'istruzione che richiede dati o annullamento di una funzione in esecuzione su un'istruzione in un altro thread. | funzione SQLCancel |
Vedere anche
di riferimento all'API ODBC
file di intestazione ODBC
'esecuzione asincrona (metodo di polling)