Partilhar via


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) -- --