Funzione SQLDisconnect
Conformità
Versione introdotta: Conformità agli standard ODBC 1.0: ISO 92
Riepilogo
SQLDisconnect chiude la connessione associata a un handle di connessione specifico.
Sintassi
SQLRETURN SQLDisconnect(
SQLHDBC ConnectionHandle);
Argomenti
ConnectionHandle
[Input] Handle di connessione.
Resi
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, SQL_INVALID_HANDLE o SQL_STILL_EXECUTING.
Diagnostica
Quando SQLDisconnect restituisce SQL_ERROR o SQL_SUCCESS_WITH_INFO, è possibile ottenere un valore SQLSTATE associato chiamando SQLGetDiagRec con handleType di SQL_HANDLE_DBC e handle di ConnectionHandle. La tabella seguente elenca i valori SQLSTATE comunemente restituiti da SQLDisconnect 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. |
01002 | Errore di disconnessione | Si è verificato un errore durante la disconnessione. Tuttavia, la disconnessione è riuscita. (La funzione restituisce SQL_SUCCESS_WITH_INFO. |
08003 | Connessione non aperta | (DM) La connessione specificata nell'argomento ConnectionHandle non era aperta. |
25000 | Stato della transazione non valido | C'è stata una transazione in corso sulla connessione specificata dall'argomento ConnectionHandle. La transazione rimane attiva. |
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 ConnectionHandle. La funzione è stata chiamata e prima di eseguire la funzione SQLCancelHandle è stata chiamata in ConnectionHandle. La funzione è stata quindi chiamata di nuovo in ConnectionHandle. La funzione è stata chiamata e prima di terminare l'esecuzione di SQLCancelHandle è stata chiamata su ConnectionHandle da un thread diverso in un'applicazione multithread. |
HY010 | Errore della sequenza di funzioni | (DM) È stata chiamata una funzione in esecuzione asincrona per un statementHandle associato a ConnectionHandle ed è ancora in esecuzione quando è stato chiamato SQLDisconnect . (DM) Una funzione in esecuzione asincrona (non questa) è stata chiamata per ConnectionHandle ed era ancora in esecuzione quando questa funzione è stata chiamata. (DM) SQLExecute, SQLExecDirect, SQLBulkOperations o SQLSetPos è stato chiamato per un statementHandle associato a ConnectionHandle e restituito SQL_NEED_DATA. Questa funzione è stata chiamata 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 | Il periodo di timeout della connessione è scaduto prima che l'origine dati ha risposto alla richiesta e la connessione sia ancora attiva. 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 ConnectionHandle 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. |
Commenti
Se un'applicazione chiama SQLDisconnect dopo che SQLBrowseConnect restituisce SQL_NEED_DATA e prima di restituire un codice restituito diverso, il driver annulla il processo di esplorazione della connessione e restituisce la connessione a uno stato non connesso.
Se un'applicazione chiama SQLDisconnect mentre è presente una transazione incompleta associata all'handle di connessione, il driver restituisce SQLSTATE 25000 (stato transazione non valida), a indicare che la transazione è invariata e che la connessione è aperta. Una transazione incompleta è una transazione di cui non è stato eseguito il commit o il rollback con SQLEndTran.
Se un'applicazione chiama SQLDisconnect prima di liberare tutte le istruzioni associate alla connessione, il driver, dopo la disconnessione dall'origine dati, libera tali istruzioni e tutti i descrittori allocati in modo esplicito nella connessione. Tuttavia, se una o più istruzioni associate alla connessione sono ancora in esecuzione in modo asincrono, SQLDisconnect restituisce SQL_ERROR con un valore SQLSTATE hy010 (errore di sequenza di funzione). INOLTRE, SQLDisconnect libera tutte le istruzioni associate e tutti i descrittori allocati in modo esplicito nella connessione, se la connessione si trova in uno stato sospeso o se SQLDisconnect è stato annullato correttamente da SQLCancelHandle.
Per informazioni su come un'applicazione usa SQLDisconnect, vedere Disconnessione da un'origine dati o da un driver.
Disconnessione da una connessione in pool
Se il pool di connessioni è abilitato per un ambiente condiviso e un'applicazione chiama SQLDisconnect su una connessione in tale ambiente, la connessione viene restituita al pool di connessioni ed è ancora disponibile per altri componenti che usano lo stesso ambiente condiviso.
Esempio di codice
Vedere Programma ODBC di esempio, funzione SQLBrowseConnect e funzione SQLConnect.
Funzioni correlate
Per informazioni su | Vedere |
---|---|
Allocazione di un handle | Funzione SQLAllocHandle |
Connessione a un'origine dati | Funzione SQLConnect |
Connessione a un'origine dati tramite una stringa di connessione o una finestra di dialogo | Funzione SQLDriverConnect |
Esecuzione di un'operazione di commit o rollback | Funzione SQLEndTran |
Liberare un handle di connessione | Funzione SQLFreeConnect |