Compartir a través de


Transiciones de conexión

Las conexiones ODBC tienen los siguientes estados.

State Descripción
C0 Entorno sin asignar, conexión sin asignar
C1 Entorno asignado, conexión sin asignar
C2 Entorno asignado, conexión asignada
C3 La función de conexión necesita datos
C4 Conexión conectada
C5 Conexión conectada, instrucción asignada
C6 Conexión conectada, transacción en curso. Es posible que una conexión esté en el estado C6 sin instrucciones asignadas en la conexión. Por ejemplo, supongamos que la conexión está en modo de confirmación manual y está en el estado C4. Si se asigna una instrucción , se ejecuta (inicia una transacción) y, a continuación, se libera, la transacción permanece activa, pero no hay ninguna instrucción en la conexión.

En las tablas siguientes se muestra cómo afecta cada función ODBC al estado de conexión.

SQLAllocHandle

C0

No Env.
C1 Sin asignar C2

Allocated
C3

Necesidad de datos
C4

Conectado
C5

.
C6

Transacción
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 fila muestra las transiciones cuando HandleType se SQL_HANDLE_ENV.

[2] Esta fila muestra las transiciones cuando HandleType se SQL_HANDLE_DBC.

[3] Esta fila muestra las transiciones cuando HandleType se SQL_HANDLE_STMT.

[4] Esta fila muestra las transiciones cuando HandleType se SQL_HANDLE_DESC.

[5] Llamar a SQLAllocHandle con OutputHandlePtr apuntando a un identificador válido sobrescribe los sobrescritos que controlan sin tener en cuenta el contenido anterior de ese identificador y pueden causar problemas para los controladores ODBC. Es incorrecto programar aplicaciones ODBC para llamar a SQLAllocHandle dos veces con la misma variable de aplicación definida para *OutputHandlePtr sin llamar a SQLFreeHandle para liberar el identificador antes de reasignarlo. La sobrescritura de los identificadores ODBC de tal manera puede provocar un comportamiento o errores incoherentes en parte de los controladores ODBC.

SQLBrowseConnect

C0

No Env.
C1

Sin asignar
C2

Allocated
C3

Necesidad de datos
C4

Conectado
C5

.
C6

Transacción
(IH) (IH) C3 [d] C4 [s] -- [d] C2 [e] C4 [s] (08002) (08002) (08002)

SQLCloseCursor

C0

No Env.
C1

Sin asignar
C2

Allocated
C3

Necesidad de datos
C4

Conectado
C5

.
C6

Transacción
(IH) (IH) (IH) (IH) (IH) -- --[1] C5[2]

[1] La conexión estaba en modo de confirmación manual.

[2] La conexión estaba en modo de confirmación automática.

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

C0

No Env.
C1

Sin asignar
C2

Allocated
C3

Necesidad de datos
C4

Conectado
C5

.
C6

Transacción
(IH) (IH) (IH) (IH) (IH) --[1] C6[2] --

[1] La conexión estaba en modo de confirmación automática o el origen de datos no comenzó una transacción.

[2] La conexión estaba en modo de confirmación manual y el origen de datos inició una transacción.

SQLConnect

C0

No Env.
C1

Sin asignar
C2

Allocated
C3

Necesidad de datos
C4

Conectado
C5

.
C6

Transacción
(IH) (IH) C4 (08002) (08002) (08002) (08002)

SQLCopyDesc, SQLGetDescField, SQLGetDescRec, SQLSetDescField y SQLSetDescRec

C0

No Env.
C1

Sin asignar
C2

Allocated
C3

Necesidad de datos
C4

Conectado
C5

.
C6

Transacción
(IH) (IH) (IH) (IH) --[1] -- --

[1] En este estado, los únicos descriptores disponibles para la aplicación son descriptores asignados explícitamente.

SQLDataSources y SQLDrivers

C0

No Env.
C1

Sin asignar
C2

Allocated
C3

Necesidad de datos
C4

Conectado
C5

.
C6

Transacción
(IH) -- -- -- -- -- --

SQLDisconnect

C0

No Env.
C1

Sin asignar
C2

Allocated
C3

Necesidad de datos
C4

Conectado
C5

.
C6

Transacción
(IH) (IH) (08003) C2 C2 C2 25000

SQLDriverConnect

C0

No Env.
C1

Sin asignar
C2

Allocated
C3

Necesidad de datos
C4

Conectado
C5

.
C6

Transacción
(IH) (IH) C4 s -- n[f] (08002) (08002) (08002) (08002)

SQLEndTran

C0

No Env.
C1

Sin asignar
C2

Allocated
C3

Necesidad de datos
C4

Conectado
C5

.
C6

Transacción
(IH) [1] --[3] --[3] --[3] -- -- --[4] o ([5], [6], y [8]) C4[5] y [7] C5[5], [6] y [9]
(IH) [2] (IH) (08003) (08003) -- -- C5

[1] Esta fila muestra las transiciones cuando HandleType se SQL_HANDLE_ENV.

[2] Esta fila muestra las transiciones cuando HandleType se SQL_HANDLE_DBC.

[3] Dado que la conexión no está en un estado conectado, no se ve afectada por la transacción.

[4] Error de confirmación o reversión en la conexión. La función devuelve SQL_ERROR en este caso.

[5] La confirmación o reversión se realizó correctamente en la conexión. La función devuelve SQL_ERROR si se produjo un error de confirmación o reversión en otra conexión, o la función devuelve SQL_SUCCESS si la confirmación o reversión se realizó correctamente en todas las conexiones.

[6] Hubo al menos una instrucción asignada en la conexión.

[7] No se asignaron instrucciones en la conexión.

[8] La conexión tenía al menos una instrucción para la que había un cursor abierto y el origen de datos conserva los cursores cuando las transacciones se confirman o revierten, lo que se aplica (dependiendo de si CompletionType se SQL_COMMIT o SQL_ROLLBACK). Para obtener más información, vea los atributos SQL_CURSOR_COMMIT_BEHAVIOR y SQL_CURSOR_ROLLBACK_BEHAVIOR en SQLGetInfo.

[9] Si la conexión tenía instrucciones para las que había cursores abiertos, los cursores no se conservaban cuando la transacción se confirmaba o se revierte.

SQLExecDirect y SQLExecute

C0

No Env.
C1

Sin asignar
C2

Allocated
C3

Necesidad de datos
C4

Conectado
C5

.
C6

Transacción
(IH) (IH) (IH) (IH) (IH) --[1] C6[2] C6[3] --

[1] La conexión estaba en modo de confirmación automática y la instrucción ejecutada no era una especificacióndel cursor (como una instrucción SELECT); o la conexión estaba en modo de confirmación manual y la instrucción ejecutada no iniciaba una transacción.

[2] La conexión estaba en modo de confirmación automática y la instrucción ejecutada era una especificación de cursor (como una instrucción SELECT).

[3] La conexión estaba en modo de confirmación manual y el origen de datos inició una transacción.

SQLFreeHandle

C0

No Env.
C1

Sin asignar
C2

Allocated
C3

Necesidad de datos
C4

Conectado
C5

.
C6

Transacción
(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] y [8] C5[6] y [8]
(IH) [4] (IH) (IH) (IH) -- -- --

[1] Esta fila muestra las transiciones cuando HandleType se SQL_HANDLE_ENV.

[2] Esta fila muestra las transiciones cuando HandleType se SQL_HANDLE_DBC.

[3] Esta fila muestra las transiciones cuando HandleType se SQL_HANDLE_STMT.

[4] Esta fila muestra las transiciones cuando HandleType se SQL_HANDLE_DESC.

[5] Solo había una instrucción asignada en la conexión.

[6] Hubo varias instrucciones asignadas en la conexión.

[7] La conexión estaba en modo de confirmación manual.

[8] La conexión estaba en modo de confirmación automática.

SQLFreeStmt

C0

No Env.
C1

Sin asignar
C2

Allocated
C3

Necesidad de datos
C4

Conectado
C5

.
C6

Transacción
(IH) [1] (IH) (IH) (IH) (IH) -- C5[3] --[4]
(IH) [2] (IH) (IH) (IH) (IH) -- --

[1] Esta fila muestra las transacciones cuando se SQL_CLOSE el argumento Option .

[2] Esta fila muestra transacciones cuando el argumento Option está SQL_UNBIND o SQL_RESET_PARAMS.

[3] La conexión estaba en modo de confirmación automática y no había cursores abiertos en ninguna instrucción excepto esta.

[4] La conexión estaba en modo de confirmación manual o estaba en modo de confirmación automática y un cursor estaba abierto en al menos una instrucción otra.

SQLGetConnectAttr

C0

No Env.
C1

Sin asignar
C2

Allocated
C3

Necesidad de datos
C4

Conectado
C5

.
C6

Transacción
IH IH --[1] 08003[2] HY010 -- -- --

[1] El argumento Attribute se SQL_ATTR_ACCESS_MODE, SQL_ATTR_AUTOCOMMIT, SQL_ATTR_LOGIN_TIMEOUT, SQL_ATTR_ODBC_CURSORS, SQL_ATTR_TRACE o SQL_ATTR_TRACEFILE, o se había establecido un valor para el atributo connection.

[2] El argumento Attribute no se SQL_ATTR_ACCESS_MODE, SQL_ATTR_AUTOCOMMIT, SQL_ATTR_LOGIN_TIMEOUT, SQL_ATTR_ODBC_CURSORS, SQL_ATTR_TRACE o SQL_ATTR_TRACEFILE, y no se había establecido un valor para el atributo connection.

SQLGetDiagField y SQLGetDiagRec

C0

No Env.
C1

Sin asignar
C2

Allocated
C3

Necesidad de datos
C4

Conectado
C5

.
C6

Transacción
(IH) [1] -- -- -- -- -- --
(IH) [2] (IH) -- -- -- -- --
(IH) [3] (IH) (IH) (IH) (IH) -- --
(IH) [4] (IH) (IH) (IH) -- -- --

[1] Esta fila muestra las transiciones cuando HandleType se SQL_HANDLE_ENV.

[2] Esta fila muestra las transiciones cuando HandleType se SQL_HANDLE_DBC.

[3] Esta fila muestra las transiciones cuando HandleType se SQL_HANDLE_STMT.

[4] Esta fila muestra las transiciones cuando HandleType se SQL_HANDLE_DESC.

SQLGetEnvAttr

C0

No Env.
C1

Sin asignar
C2

Allocated
C3

Necesidad de datos
C4

Conectado
C5

.
C6

Transacción
IH -- -- -- -- -- --

SQLGetFunctions

C0

No Env.
C1

Sin asignar
C2

Allocated
C3

Necesidad de datos
C4

Conectado
C5

.
C6

Transacción
IH IH HY010 HY010 -- -- --

SQLGetInfo

C0

No Env.
C1

Sin asignar
C2

Allocated
C3

Necesidad de datos
C4

Conectado
C5

.
C6

Transacción
IH IH --[1] 08003[2] 08003 -- -- --

[1] El argumento InfoType se SQL_ODBC_VER.

[2] El argumento InfoType no se SQL_ODBC_VER.

SQLMoreResults

C0

No Env.
C1

Sin asignar
C2

Allocated
C3

Necesidad de datos
C4

Conectado
C5

.
C6

Transacción
(IH) (IH) (IH) (IH) (IH) --[1] C6[2] --[3] C5[1]

[1] La conexión estaba en modo de confirmación automática y la llamada a SQLMoreResults no ha inicializado el procesamiento de un conjunto de resultados de una especificación de cursor.

[2] La conexión estaba en modo de confirmación automática y la llamada a SQLMoreResults ha inicializado el procesamiento de un conjunto de resultados de una especificación de cursor.

[3] La conexión estaba en modo de confirmación manual.

SQLNativeSql

C0

No Env.
C1

Sin asignar
C2

Allocated
C3

Necesidad de datos
C4

Conectado
C5

.
C6

Transacción
(IH) (IH) (08003) (08003) -- -- --

SQLPrepare

C0

No Env.
C1

Sin asignar
C2

Allocated
C3

Necesidad de datos
C4

Conectado
C5

.
C6

Transacción
(IH) (IH) (IH) (IH) (IH) --[1] C6[2] --

[1] La conexión estaba en modo de confirmación automática o el origen de datos no comenzó una transacción.

[2] La conexión estaba en modo de confirmación manual y el origen de datos inició una transacción.

SQLSetConnectAttr

C0

No Env.
C1

Sin asignar
C2

Allocated
C3

Necesidad de datos
C4

Conectado
C5

.
C6

Transacción
IH IH --[1] 08003[2] HY010 --[3] 08002[4] HY011[5] --[3] 08002[4] HY011[5] --[3] y [6] C5[8] 08002[4] HY011[5] o [7]

[1] El argumento Attribute no se SQL_ATTR_TRANSLATE_LIB ni SQL_ATTR_TRANSLATE_OPTION.

[2] El argumento Attribute se SQL_ATTR_TRANSLATE_LIB o SQL_ATTR_TRANSLATE_OPTION.

[3] El argumento Attribute no se SQL_ATTR_ODBC_CURSORS ni SQL_ATTR_PACKET_SIZE.

[4] El argumento Attribute se SQL_ATTR_ODBC_CURSORS.

[5] El argumento Attribute se SQL_ATTR_PACKET_SIZE.

[6] El argumento Attribute no se SQL_ATTR_AUTOCOMMIT o el argumento Attribute se SQL_ATTR_AUTOCOMMIT y establecer este atributo no confirmó la transacción.

[7] El argumento Attribute se SQL_ATTR_TXN_ISOLATION.

[8] El argumento Attribute se SQL_ATTR_AUTOCOMMIT y establecer este atributo confirmó la transacción.

SQLSetEnvAttr

C0

No Env.
C1

Sin asignar
C2

Allocated
C3

Necesidad de datos
C4

Conectado
C5

.
C6

Transacción
(IH) -- -- (HY010) -- -- --

Todas las demás funciones ODBC

C0

No Env.
C1

Sin asignar
C2

Allocated
C3

Necesidad de datos
C4

Conectado
C5

.
C6

Transacción
(IH) (IH) (IH) (IH) (IH) -- --