Condividi tramite


Transizioni di connessione

Le connessioni ODBC hanno gli stati seguenti.

Stato Descrizione
C0 Ambiente non allocato, connessione non allocata
C1 Ambiente allocato, connessione non allocata
S2 Ambiente allocato, connessione allocata
C3 La funzione di connessione richiede dati
C4 Connessione connessa
C5 Connessione connessa, istruzione allocata
C6 Connessione connessa, transazione in corso. È possibile che una connessione sia nello stato C6 senza istruzioni allocate nella connessione. Si supponga, ad esempio, che la connessione sia in modalità di commit manuale e sia nello stato C4. Se un'istruzione viene allocata, eseguita (avvio di una transazione) e quindi liberata, la transazione rimane attiva, ma non sono presenti istruzioni sulla connessione.

Nelle tabelle seguenti viene illustrato come ogni funzione ODBC influisce sullo stato della connessione.

SQLAllocHandle

C0

NessunA Env.
C1 Non allocato S2

Allocato
C3

Dati necessari
C4

Connesso
C5

Istruzione
C6

Transazione
C1[1] --[5] --[5] --[5] --[5] --[5] --[5]
(IH) [2] S2 --[5] --[5] --[5] --[5] --[5]
(IH) [3] (IH) (08003) (08003) C5 --[5] --[5]
(IH) [4] (IH) (08003) (08003) --[5] --[5] --[5]

[1] Questa riga mostra le transizioni quando HandleType è stato SQL_HANDLE_ENV.

[2] Questa riga mostra le transizioni quando HandleType è stato SQL_HANDLE_DBC.

[3] Questa riga mostra le transizioni quando HandleType è stato SQL_HANDLE_STMT.

[4] Questa riga mostra le transizioni quando HandleType è stato SQL_HANDLE_DESC.

[5] La chiamata di SQLAllocHandle con OutputHandlePtr punta a un handle valido sovrascrive tale handle senza considerare il contenuto precedente dell'handle e potrebbe causare problemi per i driver ODBC. La programmazione dell'applicazione ODBC non è corretta per chiamare SQLAllocHandle due volte con la stessa variabile dell'applicazione definita per *OutputHandlePtr senza chiamare SQLFreeHandle per liberare l'handle prima di riallocare l'handle. La sovrascrittura degli handle ODBC in questo modo può causare comportamenti incoerenti o errori nella parte dei driver ODBC.

SQLBrowseConnect

C0

NessunA Env.
C1

Non allocato
S2

Allocato
C3

Dati necessari
C4

Connesso
C5

Istruzione
C6

Transazione
(IH) (IH) C3 [d] C4 [s] -- [d] C2 [e] C4 [s] (08002) (08002) (08002)

SQLCloseCursor

C0

NessunA Env.
C1

Non allocato
S2

Allocato
C3

Dati necessari
C4

Connesso
C5

Istruzione
C6

Transazione
(IH) (IH) (IH) (IH) (IH) -- --[1] C5[2]

[1] La connessione era in modalità di commit manuale.

[2] La connessione era in modalità commit automatico.

SQLColumnPrivileges, SQLColumns, SQLForeignKeys, SQLGetTypeInfo, SQLPrimaryKeys, SQLProcedureColumns, SQLProcedures, SQLSpecialColumns, SQLStatistics, SQLTablePrivileges e SQLTables

C0

NessunA Env.
C1

Non allocato
S2

Allocato
C3

Dati necessari
C4

Connesso
C5

Istruzione
C6

Transazione
(IH) (IH) (IH) (IH) (IH) --[1] C6[2] --

[1] La connessione era in modalità di commit automatico o l'origine dati non ha avviato una transazione.

[2] La connessione era in modalità di commit manuale e l'origine dati ha iniziato una transazione.

SQLConnect

C0

NessunA Env.
C1

Non allocato
S2

Allocato
C3

Dati necessari
C4

Connesso
C5

Istruzione
C6

Transazione
(IH) (IH) C4 (08002) (08002) (08002) (08002)

SQLCopyDesc, SQLGetDescField, SQLGetDescRec, SQLSetDescField e SQLSetDescRec

C0

NessunA Env.
C1

Non allocato
S2

Allocato
C3

Dati necessari
C4

Connesso
C5

Istruzione
C6

Transazione
(IH) (IH) (IH) (IH) --[1] -- --

[1] In questo stato, gli unici descrittori disponibili per l'applicazione sono descrittori allocati in modo esplicito.

SQLDataSources e SQLDrivers

C0

NessunA Env.
C1

Non allocato
S2

Allocato
C3

Dati necessari
C4

Connesso
C5

Istruzione
C6

Transazione
(IH) -- -- -- -- -- --

SQLDisconnect

C0

NessunA Env.
C1

Non allocato
S2

Allocato
C3

Dati necessari
C4

Connesso
C5

Istruzione
C6

Transazione
(IH) (IH) (08003) S2 S2 S2 25000

SQLDriverConnect

C0

NessunA Env.
C1

Non allocato
S2

Allocato
C3

Dati necessari
C4

Connesso
C5

Istruzione
C6

Transazione
(IH) (IH) C4 s -- n[f] (08002) (08002) (08002) (08002)

SQLEndTran

C0

NessunA Env.
C1

Non allocato
S2

Allocato
C3

Dati necessari
C4

Connesso
C5

Istruzione
C6

Transazione
(IH) [1] --[3] --[3] --[3] -- -- --[4] o ([5], [6], e [8]) C4[5] e [7] C5[5], [6], e [9]
(IH) [2] (IH) (08003) (08003) -- -- C5

[1] Questa riga mostra le transizioni quando HandleType è stato SQL_HANDLE_ENV.

[2] Questa riga mostra le transizioni quando HandleType è stato SQL_HANDLE_DBC.

[3] Poiché la connessione non è in uno stato connesso, non è influenzata dalla transazione.

[4] Il commit o il rollback non è riuscito nella connessione. La funzione restituisce SQL_ERROR in questo caso.

[5] Il commit o il rollback è riuscito nella connessione. La funzione restituisce SQL_ERROR se il commit o il rollback non è riuscito in un'altra connessione oppure la funzione restituisce SQL_SUCCESS se il commit o il rollback è riuscito in tutte le connessioni.

[6] Nella connessione è stata allocata almeno un'istruzione.

[7] Non sono state allocate istruzioni sulla connessione.

[8] La connessione aveva almeno un'istruzione per la quale era presente un cursore aperto e l'origine dati mantiene i cursori quando viene eseguito il commit o il rollback delle transazioni, a seconda del fatto che CompletionType fosse SQL_COMMIT o SQL_ROLLBACK. Per altre informazioni, vedere gli attributi SQL_CURSOR_COMMIT_BEHAVIOR e SQL_CURSOR_ROLLBACK_BEHAVIOR in SQLGetInfo.

[9] Se la connessione aveva istruzioni per le quali erano presenti cursori aperti, i cursori non venivano mantenuti quando è stato eseguito il commit o il rollback della transazione.

SQLExecDirect e SQLExecute

C0

NessunA Env.
C1

Non allocato
S2

Allocato
C3

Dati necessari
C4

Connesso
C5

Istruzione
C6

Transazione
(IH) (IH) (IH) (IH) (IH) --[1] C6[2] C6[3] --

[1] La connessione era in modalità commit automatico e l'istruzione eseguita non era una specifica del cursore (ad esempio un'istruzione SELECT) oppure la connessione era in modalità di commit manuale e l'istruzione eseguita non ha avviato una transazione.

[2] La connessione era in modalità commit automatico e l'istruzione eseguita era una specifica del cursore( ad esempio un'istruzione SELECT).

[3] La connessione era in modalità di commit manuale e l'origine dati ha iniziato una transazione.

SQLFreeHandle

C0

NessunA Env.
C1

Non allocato
S2

Allocato
C3

Dati necessari
C4

Connesso
C5

Istruzione
C6

Transazione
(IH) [1] C0 (HY010) (HY010) (HY010) (HY010) (HY010)
(IH) [2] (IH) (C1) (HY010) (HY010) (HY010) (HY010)
(IH) [3] (IH) (IH) (IH) (IH) C4[5] --[6] --[7] C4[5] e [8] C5[6] e [8]
(IH) [4] (IH) (IH) (IH) -- -- --

[1] Questa riga mostra le transizioni quando HandleType è stato SQL_HANDLE_ENV.

[2] Questa riga mostra le transizioni quando HandleType è stato SQL_HANDLE_DBC.

[3] Questa riga mostra le transizioni quando HandleType è stato SQL_HANDLE_STMT.

[4] Questa riga mostra le transizioni quando HandleType è stato SQL_HANDLE_DESC.

[5] Nella connessione è stata allocata una sola istruzione.

[6] Nella connessione sono state allocate più istruzioni.

[7] La connessione era in modalità di commit manuale.

[8] La connessione era in modalità di commit automatico.

SQLFreeStmt

C0

NessunA Env.
C1

Non allocato
S2

Allocato
C3

Dati necessari
C4

Connesso
C5

Istruzione
C6

Transazione
(IH) [1] (IH) (IH) (IH) (IH) -- C5[3] --[4]
(IH) [2] (IH) (IH) (IH) (IH) -- --

[1] Questa riga mostra le transazioni quando l'argomento Option è SQL_CLOSE.

[2] Questa riga mostra le transazioni quando l'argomento Option è SQL_UNBIND o SQL_RESET_PARAMS.

[3] La connessione era in modalità di commit automatico e nessun cursore era aperto in alcuna istruzione, ad eccezione di questa.

[4] La connessione era in modalità di commit manuale oppure era in modalità commit automatico e un cursore era aperto su almeno un'altra istruzione.

SQLGetConnectAttr

C0

NessunA Env.
C1

Non allocato
S2

Allocato
C3

Dati necessari
C4

Connesso
C5

Istruzione
C6

Transazione
IH IH --[1] 08003[2] HY010 -- -- --

[1] L'argomento Attribute è stato SQL_ATTR_ACCESS_MODE, SQL_ATTR_AUTOCOMMIT, SQL_ATTR_LOGIN_TIMEOUT, SQL_ATTR_ODBC_CURSORS, SQL_ATTR_TRACE o SQL_ATTR_TRACEFILE oppure è stato impostato un valore per l'attributo di connessione.

[2] L'argomento Attribute non è stato SQL_ATTR_ACCESS_MODE, SQL_ATTR_AUTOCOMMIT, SQL_ATTR_LOGIN_TIMEOUT, SQL_ATTR_ODBC_CURSORS, SQL_ATTR_TRACE o SQL_ATTR_TRACEFILE e un valore non è stato impostato per l'attributo di connessione.

SQLGetDiagField e SQLGetDiagRec

C0

NessunA Env.
C1

Non allocato
S2

Allocato
C3

Dati necessari
C4

Connesso
C5

Istruzione
C6

Transazione
(IH) [1] -- -- -- -- -- --
(IH) [2] (IH) -- -- -- -- --
(IH) [3] (IH) (IH) (IH) (IH) -- --
(IH) [4] (IH) (IH) (IH) -- -- --

[1] Questa riga mostra le transizioni quando HandleType è stato SQL_HANDLE_ENV.

[2] Questa riga mostra le transizioni quando HandleType è stato SQL_HANDLE_DBC.

[3] Questa riga mostra le transizioni quando HandleType è stato SQL_HANDLE_STMT.

[4] Questa riga mostra le transizioni quando HandleType è stato SQL_HANDLE_DESC.

SQLGetEnvAttr

C0

NessunA Env.
C1

Non allocato
S2

Allocato
C3

Dati necessari
C4

Connesso
C5

Istruzione
C6

Transazione
IH -- -- -- -- -- --

SQLGetFunctions

C0

NessunA Env.
C1

Non allocato
S2

Allocato
C3

Dati necessari
C4

Connesso
C5

Istruzione
C6

Transazione
IH IH HY010 HY010 -- -- --

SQLGetInfo

C0

NessunA Env.
C1

Non allocato
S2

Allocato
C3

Dati necessari
C4

Connesso
C5

Istruzione
C6

Transazione
IH IH --[1] 08003[2] 08003 -- -- --

[1] L'argomento InfoType è stato SQL_ODBC_VER.

[2] L'argomento InfoType non è stato SQL_ODBC_VER.

SQLMoreResults

C0

NessunA Env.
C1

Non allocato
S2

Allocato
C3

Dati necessari
C4

Connesso
C5

Istruzione
C6

Transazione
(IH) (IH) (IH) (IH) (IH) --[1] C6[2] --[3] C5[1]

[1] La connessione era in modalità commit automatico e la chiamata a SQLMoreResults non ha inizializzato l'elaborazione di un set di risultati di una specifica del cursore.

[2] La connessione era in modalità commit automatico e la chiamata a SQLMoreResults ha inizializzato l'elaborazione di un set di risultati di una specifica del cursore.

[3] La connessione era in modalità di commit manuale.

SQLNativeSql

C0

NessunA Env.
C1

Non allocato
S2

Allocato
C3

Dati necessari
C4

Connesso
C5

Istruzione
C6

Transazione
(IH) (IH) (08003) (08003) -- -- --

SQLPrepare

C0

NessunA Env.
C1

Non allocato
S2

Allocato
C3

Dati necessari
C4

Connesso
C5

Istruzione
C6

Transazione
(IH) (IH) (IH) (IH) (IH) --[1] C6[2] --

[1] La connessione era in modalità di commit automatico o l'origine dati non ha avviato una transazione.

[2] La connessione era in modalità di commit manuale e l'origine dati ha iniziato una transazione.

SQLSetConnectAttr

C0

NessunA Env.
C1

Non allocato
S2

Allocato
C3

Dati necessari
C4

Connesso
C5

Istruzione
C6

Transazione
IH IH --[1] 08003[2] HY010 --[3] 08002[4] HY011[5] --[3] 08002[4] HY011[5] --[3] e [6] C5[8] 08002[4] HY011[5] o [7]

[1] L'argomento Attribute non è stato SQL_ATTR_TRANSLATE_LIB o SQL_ATTR_TRANSLATE_OPTION.

[2] L'argomento Attribute è stato SQL_ATTR_TRANSLATE_LIB o SQL_ATTR_TRANSLATE_OPTION.

[3] L'argomento Attribute non è stato SQL_ATTR_ODBC_CURSORS o SQL_ATTR_PACKET_SIZE.

[4] L'argomento Attribute è stato SQL_ATTR_ODBC_CURSORS.

[5] L'argomento Attribute è stato SQL_ATTR_PACKET_SIZE.

[6] L'argomento Attribute non è stato SQL_ATTR_AUTOCOMMIT oppure l'argomento Attribute è stato SQL_ATTR_AUTOCOMMIT e l'impostazione di questo attributo non ha eseguito il commit della transazione.

[7] L'argomento Attribute è stato SQL_ATTR_TXN_ISOLATION.

[8] L'argomento Attribute è stato SQL_ATTR_AUTOCOMMIT e l'impostazione di questo attributo ha eseguito il commit della transazione.

SQLSetEnvAttr

C0

NessunA Env.
C1

Non allocato
S2

Allocato
C3

Dati necessari
C4

Connesso
C5

Istruzione
C6

Transazione
(IH) -- -- (HY010) -- -- --

Tutte le altre funzioni ODBC

C0

NessunA Env.
C1

Non allocato
S2

Allocato
C3

Dati necessari
C4

Connesso
C5

Istruzione
C6

Transazione
(IH) (IH) (IH) (IH) (IH) -- --