Transições de conexão
As conexões ODBC têm os seguintes estados.
Estado | Descrição |
---|---|
C0 | Ambiente não alocado, conexão não alocada |
C1 | Ambiente alocado, conexão não alocada |
C2 | Ambiente alocado, conexão alocada |
C3 | A função de conexão precisa de dados |
C4 | Conexão conectada |
C5 | Conexão conectada, instrução alocada |
C6 | Conexão conectada, transação em andamento. É possível que uma conexão esteja no estado C6 sem instruções alocadas na conexão. Por exemplo, suponha que a conexão esteja no modo de confirmação manual e no estado C4. Se uma instrução for alocada, executada (iniciando uma transação) e, em seguida, liberada, a transação permanecerá ativa, mas não há instruções na conexão. |
As tabelas a seguir mostram como cada função ODBC afeta o estado da conexão.
SQLAllocHandle
C0 Sem Env. |
C1 Não afetado | C2 Atribuído |
C3 Precisa de dados |
C4 Ligado |
C5 Declaração |
C6 Transação |
---|---|---|---|---|---|---|
C1[1] | --[5] | --[5] | --[5] | --[5] | --[5] | --[5] |
(IH)[2] | C2 | --[5] | --[5] | --[5] | --[5] | --[5] |
(IH)[3] | (IH) | (08003) | (08003) | C5 | --[5] | --[5] |
(IH)[4] | (IH) | (08003) | (08003) | --[5] | --[5] | --[5] |
[1] Esta linha mostra as transições quando HandleType foi SQL_HANDLE_ENV.
[2] Esta linha mostra as transições quando HandleType foi SQL_HANDLE_DBC.
[3] Esta linha mostra as transições quando HandleType foi SQL_HANDLE_STMT.
[4] Esta linha mostra as transições quando HandleType foi SQL_HANDLE_DESC.
[5] Chamar SQLAllocHandle com OutputHandlePtr apontar para um identificador válido substitui esse identificador sem levar em conta o conteúdo anterior desse identificador e pode causar problemas para drivers ODBC. É incorreto a programação de aplicativos ODBC chamar SQLAllocHandle duas vezes com a mesma variável de aplicativo definida para *OutputHandlePtr sem chamar SQLFreeHandle para liberar o identificador antes de realocá-lo. Substituir identificadores ODBC de tal maneira pode levar a um comportamento inconsistente ou erros por parte dos drivers ODBC.
SQLBrowseConnect
C0 Sem Env. |
C1 Não alocado |
C2 Atribuído |
C3 Precisa de dados |
C4 Ligado |
C5 Declaração |
C6 Transação |
---|---|---|---|---|---|---|
(IH) | (IH) | C3 [d] C4 [s] | -- [d] C2 [e] C4 [s] | (08002) | (08002) | (08002) |
SQLCloseCursor
C0 Sem Env. |
C1 Não alocado |
C2 Atribuído |
C3 Precisa de dados |
C4 Ligado |
C5 Declaração |
C6 Transação |
---|---|---|---|---|---|---|
(IH) | (IH) | (IH) | (IH) | (IH) | -- | --[1] C5[2] |
[1] A conexão estava no modo de confirmação manual.
[2] A conexão estava no modo de confirmação automática.
SQLColumnPrivileges, SQLColumns, SQLForeignKeys, SQLGetTypeInfo, SQLPrimaryKeys, SQLProcedureColumns, SQLProcedures, SQLSpecialColumns, SQLStatistics, SQLTablePrivileges e SQLTables
C0 Sem Env. |
C1 Não alocado |
C2 Atribuído |
C3 Precisa de dados |
C4 Ligado |
C5 Declaração |
C6 Transação |
---|---|---|---|---|---|---|
(IH) | (IH) | (IH) | (IH) | (IH) | --[1] C6[2] | -- |
[1] A conexão estava no modo de confirmação automática ou a fonte de dados não iniciou uma transação.
[2] A conexão estava no modo de confirmação manual, e a fonte de dados iniciou uma transação.
SQLConnect
C0 Sem Env. |
C1 Não alocado |
C2 Atribuído |
C3 Precisa de dados |
C4 Ligado |
C5 Declaração |
C6 Transação |
---|---|---|---|---|---|---|
(IH) | (IH) | C4 | (08002) | (08002) | (08002) | (08002) |
SQLCopyDesc, SQLGetDescField, SQLGetDescRec, SQLSetDescField e SQLSetDescRec
C0 Sem Env. |
C1 Não alocado |
C2 Atribuído |
C3 Precisa de dados |
C4 Ligado |
C5 Declaração |
C6 Transação |
---|---|---|---|---|---|---|
(IH) | (IH) | (IH) | (IH) | --[1] | -- | -- |
[1] Neste estado, os únicos descritores disponíveis para a aplicação são descritores explicitamente atribuídos.
SQLDataSources e SQLDrivers
C0 Sem Env. |
C1 Não alocado |
C2 Atribuído |
C3 Precisa de dados |
C4 Ligado |
C5 Declaração |
C6 Transação |
---|---|---|---|---|---|---|
(IH) | -- | -- | -- | -- | -- | -- |
SQLDisconnect
C0 Sem Env. |
C1 Não alocado |
C2 Atribuído |
C3 Precisa de dados |
C4 Ligado |
C5 Declaração |
C6 Transação |
---|---|---|---|---|---|---|
(IH) | (IH) | (08003) | C2 | C2 | C2 | 25000 |
SQLDriverConnect
C0 Sem Env. |
C1 Não alocado |
C2 Atribuído |
C3 Precisa de dados |
C4 Ligado |
C5 Declaração |
C6 Transação |
---|---|---|---|---|---|---|
(IH) | (IH) | C4 s -- n[f] | (08002) | (08002) | (08002) | (08002) |
SQLEndTran
C0 Sem Env. |
C1 Não alocado |
C2 Atribuído |
C3 Precisa de dados |
C4 Ligado |
C5 Declaração |
C6 Transação |
---|---|---|---|---|---|---|
(IH)[1] | --[3] | --[3] | --[3] | -- | -- | --[4] ou ([5], [6] e [8]) C4[5] e [7] C5[5], [6] e [9] |
(IH)[2] | (IH) | (08003) | (08003) | -- | -- | C5 |
[1] Esta linha mostra as transições quando HandleType foi SQL_HANDLE_ENV.
[2] Esta linha mostra as transições quando HandleType foi SQL_HANDLE_DBC.
[3] Como a conexão não está em um estado conectado, ela não é afetada pela transação.
[4] A confirmação ou reversão falhou na conexão. A função retorna SQL_ERROR neste caso.
[5] A confirmação ou reversão foi bem-sucedida na conexão. A função retorna SQL_ERROR se a confirmação ou reversão falhou em outra conexão, ou a função retorna SQL_SUCCESS se a confirmação ou reversão foi bem-sucedida em todas as conexões.
[6] Houve pelo menos uma declaração alocada na conexão.
[7] Não foram atribuídas declarações sobre a ligação.
[8] A conexão tinha pelo menos uma instrução para a qual havia um cursor aberto, e a fonte de dados preserva os cursores quando as transações são confirmadas ou revertidas, o que for aplicável (dependendo se CompletionType foi SQL_COMMIT ou SQL_ROLLBACK). Para obter mais informações, consulte os atributos SQL_CURSOR_COMMIT_BEHAVIOR e SQL_CURSOR_ROLLBACK_BEHAVIOR em SQLGetInfo.
[9] Se a conexão tinha quaisquer instruções para as quais havia cursores abertos, os cursores não foram preservados quando a transação foi confirmada ou revertida.
SQLExecDirect e SQLExecute
C0 Sem Env. |
C1 Não alocado |
C2 Atribuído |
C3 Precisa de dados |
C4 Ligado |
C5 Declaração |
C6 Transação |
---|---|---|---|---|---|---|
(IH) | (IH) | (IH) | (IH) | (IH) | --[1] C6[2] C6[3] | -- |
[1] A conexão estava no modo de confirmação automática, e a instrução executada não era um cursor especificação (como uma instrução SELECT); ou a conexão estava no modo de confirmação manual e a instrução executada não iniciou uma transação.
[2] A conexão estava no modo de confirmação automática, e a instrução executada era um cursor especificação (como uma instrução SELECT).
[3] A conexão estava no modo de confirmação manual, e a fonte de dados iniciou uma transação.
SQLFreeHandle
C0 Sem Env. |
C1 Não alocado |
C2 Atribuído |
C3 Precisa de dados |
C4 Ligado |
C5 Declaração |
C6 Transação |
---|---|---|---|---|---|---|
(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] Esta linha mostra as transições quando HandleType foi SQL_HANDLE_ENV.
[2] Esta linha mostra as transições quando HandleType foi SQL_HANDLE_DBC.
[3] Esta linha mostra as transições quando HandleType foi SQL_HANDLE_STMT.
[4] Esta linha mostra as transições quando HandleType foi SQL_HANDLE_DESC.
[5] Houve apenas uma declaração alocada na conexão.
[6] Houve várias declarações alocadas na conexão.
[7] A conexão estava no modo de confirmação manual.
[8] A conexão estava no modo de confirmação automática.
SQLFreeStmt
C0 Sem Env. |
C1 Não alocado |
C2 Atribuído |
C3 Precisa de dados |
C4 Ligado |
C5 Declaração |
C6 Transação |
---|---|---|---|---|---|---|
(IH)[1] | (IH) | (IH) | (IH) | (IH) | -- | C5[3] --[4] |
(IH)[2] | (IH) | (IH) | (IH) | (IH) | -- | -- |
[1] Esta linha mostra as transações quando o argumento Option é SQL_CLOSE.
[2] Esta linha mostra as transações quando o argumento Option é SQL_UNBIND ou SQL_RESET_PARAMS.
[3] A conexão estava no modo de confirmação automática, e nenhum cursor estava aberto em nenhuma instrução, exceto esta.
[4] A conexão estava no modo de confirmação manual, ou estava no modo de confirmação automática e um cursor estava aberto em pelo menos uma outra instrução.
SQLGetConnectAttr
C0 Sem Env. |
C1 Não alocado |
C2 Atribuído |
C3 Precisa de dados |
C4 Ligado |
C5 Declaração |
C6 Transação |
---|---|---|---|---|---|---|
IH | IH | --[1] 08003[2] | HY010 | -- | -- | -- |
[1] O argumento Attribute foi SQL_ATTR_ACCESS_MODE, SQL_ATTR_AUTOCOMMIT, SQL_ATTR_LOGIN_TIMEOUT, SQL_ATTR_ODBC_CURSORS, SQL_ATTR_TRACE ou SQL_ATTR_TRACEFILE, ou um valor foi definido para o atributo connection.
[2] O argumento Attribute não foi SQL_ATTR_ACCESS_MODE, SQL_ATTR_AUTOCOMMIT, SQL_ATTR_LOGIN_TIMEOUT, SQL_ATTR_ODBC_CURSORS, SQL_ATTR_TRACE ou SQL_ATTR_TRACEFILE, e um valor não foi definido para o atributo connection.
SQLGetDiagField e SQLGetDiagRec
C0 Sem Env. |
C1 Não alocado |
C2 Atribuído |
C3 Precisa de dados |
C4 Ligado |
C5 Declaração |
C6 Transação |
---|---|---|---|---|---|---|
(IH)[1] | -- | -- | -- | -- | -- | -- |
(IH)[2] | (IH) | -- | -- | -- | -- | -- |
(IH)[3] | (IH) | (IH) | (IH) | (IH) | -- | -- |
(IH)[4] | (IH) | (IH) | (IH) | -- | -- | -- |
[1] Esta linha mostra as transições quando HandleType foi SQL_HANDLE_ENV.
[2] Esta linha mostra as transições quando HandleType foi SQL_HANDLE_DBC.
[3] Esta linha mostra as transições quando HandleType foi SQL_HANDLE_STMT.
[4] Esta linha mostra as transições quando HandleType foi SQL_HANDLE_DESC.
SQLGetEnvAttr
C0 Sem Env. |
C1 Não alocado |
C2 Atribuído |
C3 Precisa de dados |
C4 Ligado |
C5 Declaração |
C6 Transação |
---|---|---|---|---|---|---|
IH | -- | -- | -- | -- | -- | -- |
SQLGetFunctions
C0 Sem Env. |
C1 Não alocado |
C2 Atribuído |
C3 Precisa de dados |
C4 Ligado |
C5 Declaração |
C6 Transação |
---|---|---|---|---|---|---|
IH | IH | HY010 | HY010 | -- | -- | -- |
SQLGetInfo
C0 Sem Env. |
C1 Não alocado |
C2 Atribuído |
C3 Precisa de dados |
C4 Ligado |
C5 Declaração |
C6 Transação |
---|---|---|---|---|---|---|
IH | IH | --[1] 08003[2] | 08003 | -- | -- | -- |
[1] O argumento InfoType foi SQL_ODBC_VER.
[2] O argumento InfoType não foi SQL_ODBC_VER.
SQLMoreResults
C0 Sem Env. |
C1 Não alocado |
C2 Atribuído |
C3 Precisa de dados |
C4 Ligado |
C5 Declaração |
C6 Transação |
---|---|---|---|---|---|---|
(IH) | (IH) | (IH) | (IH) | (IH) | --[1] C6[2] | --[3] C5[1] |
[1] A conexão estava no modo de confirmação automática e a chamada para SQLMoreResults não inicializou o processamento de um conjunto de resultados de uma especificação de cursor.
[2] A conexão estava no modo de confirmação automática e a chamada para SQLMoreResults inicializou o processamento de um conjunto de resultados de uma especificação de cursor.
[3] A conexão estava no modo de confirmação manual.
SQLNativeSql
C0 Sem Env. |
C1 Não alocado |
C2 Atribuído |
C3 Precisa de dados |
C4 Ligado |
C5 Declaração |
C6 Transação |
---|---|---|---|---|---|---|
(IH) | (IH) | (08003) | (08003) | -- | -- | -- |
SQLPrepare
C0 Sem Env. |
C1 Não alocado |
C2 Atribuído |
C3 Precisa de dados |
C4 Ligado |
C5 Declaração |
C6 Transação |
---|---|---|---|---|---|---|
(IH) | (IH) | (IH) | (IH) | (IH) | --[1] C6[2] | -- |
[1] A conexão estava no modo de confirmação automática ou a fonte de dados não iniciou uma transação.
[2] A conexão estava no modo de confirmação manual, e a fonte de dados iniciou uma transação.
SQLSetConnectAttr
C0 Sem Env. |
C1 Não alocado |
C2 Atribuído |
C3 Precisa de dados |
C4 Ligado |
C5 Declaração |
C6 Transação |
---|---|---|---|---|---|---|
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] ou [7] |
[1] O argumento Atributo não foi SQL_ATTR_TRANSLATE_LIB nem SQL_ATTR_TRANSLATE_OPTION.
[2] O argumento Atributo foi SQL_ATTR_TRANSLATE_LIB ou SQL_ATTR_TRANSLATE_OPTION.
[3] O argumento Atributo não foi SQL_ATTR_ODBC_CURSORS nem SQL_ATTR_PACKET_SIZE.
[4] O argumento Attribute foi SQL_ATTR_ODBC_CURSORS.
[5] O argumento Attribute foi SQL_ATTR_PACKET_SIZE.
[6] O argumento Attribute não foi SQL_ATTR_AUTOCOMMIT, ou o argumento Attribute foi SQL_ATTR_AUTOCOMMIT e a definição deste atributo não confirmou a transação.
[7] O argumento Atributo foi SQL_ATTR_TXN_ISOLATION.
[8] O argumento Attribute foi SQL_ATTR_AUTOCOMMIT, e a definição deste atributo comprometeu a transação.
SQLSetEnvAttr
C0 Sem Env. |
C1 Não alocado |
C2 Atribuído |
C3 Precisa de dados |
C4 Ligado |
C5 Declaração |
C6 Transação |
---|---|---|---|---|---|---|
(IH) | -- | -- | (HY010) | -- | -- | -- |
Todas as outras funções ODBC
C0 Sem Env. |
C1 Não alocado |
C2 Atribuído |
C3 Precisa de dados |
C4 Ligado |
C5 Declaração |
C6 Transação |
---|---|---|---|---|---|---|
(IH) | (IH) | (IH) | (IH) | (IH) | -- | -- |