Compartilhar via


Transições de conexão

As conexões ODBC têm os seguintes estados.

Estadual 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 depois liberada, a transação permanecerá ativa, mas não haverá 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 Alocado C2

Alocado
C3

Precisa de dados
C4

Conectado
C5

Instruçã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 transições quando HandleType foi SQL_HANDLE_DBC.

[3] Esta linha mostra 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 apontando para um identificador válido substitui esse identificador sem considerar o conteúdo anterior desse identificador e pode causar problemas para drivers ODBC. É uma programação incorreta 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 dessa maneira pode levar a um comportamento inconsistente ou erros por parte dos drivers ODBC.

SQLBrowseConnect

C0

Sem Env.
C1

Não alocado
C2

Alocado
C3

Precisa de dados
C4

Conectado
C5

Instruçã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

Alocado
C3

Precisa de dados
C4

Conectado
C5

Instruçã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

Alocado
C3

Precisa de dados
C4

Conectado
C5

Instruçã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

Alocado
C3

Precisa de dados
C4

Conectado
C5

Instruçã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

Alocado
C3

Precisa de dados
C4

Conectado
C5

Instrução
C6

Transação
(IH) (IH) (IH) (IH) --[1] -- --

[1] Nesse estado, os únicos descritores disponíveis para o aplicativo são descritores explicitamente alocados.

SQLDataSources e SQLDrivers

C0

Sem Env.
C1

Não alocado
C2

Alocado
C3

Precisa de dados
C4

Conectado
C5

Instrução
C6

Transação
(IH) -- -- -- -- -- --

SQLDisconnect

C0

Sem Env.
C1

Não alocado
C2

Alocado
C3

Precisa de dados
C4

Conectado
C5

Instrução
C6

Transação
(IH) (IH) (08003) C2 C2 C2 25000

SQLDriverConnect

C0

Sem Env.
C1

Não alocado
C2

Alocado
C3

Precisa de dados
C4

Conectado
C5

Instrução
C6

Transação
(IH) (IH) C4 s -- n[f] (08002) (08002) (08002) (08002)

SQLEndTran

C0

Sem Env.
C1

Não alocado
C2

Alocado
C3

Precisa de dados
C4

Conectado
C5

Instruçã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 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] O commit ou rollback falhou na conexão. A função retorna SQL_ERROR nesse caso.

[5] O commit ou rollback foi bem-sucedido 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] Havia pelo menos uma declaração alocada na conexão.

[7] Não houve declarações alocadas na conexão.

[8] A conexão tinha pelo menos uma instrução para a qual havia um cursor aberto e a fonte de dados preserva cursores quando as transações são confirmadas ou revertidas, o que se aplicar (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 tivesse instruções para as quais houvesse cursores abertos, os cursores não eram preservados quando a transação era confirmada ou revertida.

SQLExecDirect e SQLExecute

C0

Sem Env.
C1

Não alocado
C2

Alocado
C3

Precisa de dados
C4

Conectado
C5

Instruçã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 uma especificação de cursor (como uma instrução SELECT); ou a conexão estava no modo de confirmação manual e a instrução executada não iniciava uma transação.

[2] A conexão estava no modo de confirmação automática e a instrução executada era uma especificação de cursor (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

Alocado
C3

Precisa de dados
C4

Conectado
C5

Instruçã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 transições quando HandleType foi SQL_HANDLE_DBC.

[3] Esta linha mostra transições quando HandleType foi SQL_HANDLE_STMT.

[4] Esta linha mostra as transições quando HandleType foi SQL_HANDLE_DESC.

[5] Havia apenas uma declaração alocada na conexão.

[6] Havia 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

Alocado
C3

Precisa de dados
C4

Conectado
C5

Instrução
C6

Transação
(IH) [1] (IH) (IH) (IH) (IH) -- C5[3] --[4]
(IH) [2] (IH) (IH) (IH) (IH) -- --

[1] Esta linha mostra transações quando o argumento Option é SQL_CLOSE.

[2] Esta linha mostra 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 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

Alocado
C3

Precisa de dados
C4

Conectado
C5

Instrução
C6

Transação
IH IH --[1] 08003[2] HY010 -- -- --

[1] O argumento Attribute era 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 de conexão.

[2] O argumento Attribute não era 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 havia sido definido para o atributo de conexão.

SQLGetDiagField e SQLGetDiagRec

C0

Sem Env.
C1

Não alocado
C2

Alocado
C3

Precisa de dados
C4

Conectado
C5

Instruçã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 transições quando HandleType foi SQL_HANDLE_DBC.

[3] Esta linha mostra 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

Alocado
C3

Precisa de dados
C4

Conectado
C5

Instrução
C6

Transação
IH -- -- -- -- -- --

SQLGetFunctions

C0

Sem Env.
C1

Não alocado
C2

Alocado
C3

Precisa de dados
C4

Conectado
C5

Instrução
C6

Transação
IH IH HY010 HY010 -- -- --

SQLGetInfo

C0

Sem Env.
C1

Não alocado
C2

Alocado
C3

Precisa de dados
C4

Conectado
C5

Instruçã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

Alocado
C3

Precisa de dados
C4

Conectado
C5

Instruçã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

Alocado
C3

Precisa de dados
C4

Conectado
C5

Instrução
C6

Transação
(IH) (IH) (08003) (08003) -- -- --

SQLPrepare

C0

Sem Env.
C1

Não alocado
C2

Alocado
C3

Precisa de dados
C4

Conectado
C5

Instruçã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

Alocado
C3

Precisa de dados
C4

Conectado
C5

Instruçã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 ou SQL_ATTR_TRANSLATE_OPTION.

[2] O argumento Attribute era SQL_ATTR_TRANSLATE_LIB ou SQL_ATTR_TRANSLATE_OPTION.

[3] O argumento Attribute não foi SQL_ATTR_ODBC_CURSORS ou 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 definir esse atributo não confirmou a transação.

[7] O argumento Attribute foi SQL_ATTR_TXN_ISOLATION.

[8] O argumento Attribute foi SQL_ATTR_AUTOCOMMIT e definir esse atributo confirmou a transação.

SQLSetEnvAttr

C0

Sem Env.
C1

Não alocado
C2

Alocado
C3

Precisa de dados
C4

Conectado
C5

Instrução
C6

Transação
(IH) -- -- (HY010) -- -- --

Todas as outras funções ODBC

C0

Sem Env.
C1

Não alocado
C2

Alocado
C3

Precisa de dados
C4

Conectado
C5

Instrução
C6

Transação
(IH) (IH) (IH) (IH) (IH) -- --