Condividi tramite


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.

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

Vedi anche

Riferimento API ODBC
File di intestazione ODBC