Compartir a través de


Transiciones de conexión

Las conexiones ODBC tienen los siguientes estados.

Estado 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 connection 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 (iniciando una transacción) y, a continuación, se libera, la transacción permanece activa, pero no hay instrucciones en la conexión.

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

SQLAllocHandle

C0

Sin Env.
C1 Sin asignar C2

Asignado
C3

Necesidad de datos
C4

Conectado
C5

Instrucción
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 sobrescrituras 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. Sobrescribir los identificadores ODBC de tal manera puede provocar un comportamiento o errores incoherentes en la parte de los controladores ODBC.

SQLBrowseConnect

C0

Sin Env.
C1

Sin asignar
C2

Asignado
C3

Necesidad de datos
C4

Conectado
C5

Instrucción
C6

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

SQLCloseCursor

C0

Sin Env.
C1

Sin asignar
C2

Asignado
C3

Necesidad de datos
C4

Conectado
C5

Instrucción
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

Sin Env.
C1

Sin asignar
C2

Asignado
C3

Necesidad de datos
C4

Conectado
C5

Instrucción
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

Sin Env.
C1

Sin asignar
C2

Asignado
C3

Necesidad de datos
C4

Conectado
C5

Instrucción
C6

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

SQLCopyDesc, SQLGetDescField, SQLGetDescRec, SQLSetDescField y SQLSetDescRec

C0

Sin Env.
C1

Sin asignar
C2

Asignado
C3

Necesidad de datos
C4

Conectado
C5

Instrucción
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

Sin Env.
C1

Sin asignar
C2

Asignado
C3

Necesidad de datos
C4

Conectado
C5

Instrucción
C6

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

SQLDisconnect

C0

Sin Env.
C1

Sin asignar
C2

Asignado
C3

Necesidad de datos
C4

Conectado
C5

Instrucción
C6

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

SQLDriverConnect

C0

Sin Env.
C1

Sin asignar
C2

Asignado
C3

Necesidad de datos
C4

Conectado
C5

Instrucción
C6

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

SQLEndTran

C0

Sin Env.
C1

Sin asignar
C2

Asignado
C3

Necesidad de datos
C4

Conectado
C5

Instrucción
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] Había 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 se revierten, lo que se aplica (en función de si CompletionType se SQL_COMMIT o SQL_ROLLBACK). Para obtener más información, consulte 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 conservaron cuando la transacción se confirmó o reviertó.

SQLExecDirect y SQLExecute

C0

Sin Env.
C1

Sin asignar
C2

Asignado
C3

Necesidad de datos
C4

Conectado
C5

Instrucción
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ón de 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

Sin Env.
C1

Sin asignar
C2

Asignado
C3

Necesidad de datos
C4

Conectado
C5

Instrucción
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] Había 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

Sin Env.
C1

Sin asignar
C2

Asignado
C3

Necesidad de datos
C4

Conectado
C5

Instrucción
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 las transacciones cuando el argumento Option es 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.

SQLGetConnectAttr

C0

Sin Env.
C1

Sin asignar
C2

Asignado
C3

Necesidad de datos
C4

Conectado
C5

Instrucción
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 de conexión.

[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 de conexión.

SQLGetDiagField y SQLGetDiagRec

C0

Sin Env.
C1

Sin asignar
C2

Asignado
C3

Necesidad de datos
C4

Conectado
C5

Instrucción
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

Sin Env.
C1

Sin asignar
C2

Asignado
C3

Necesidad de datos
C4

Conectado
C5

Instrucción
C6

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

SQLGetFunctions

C0

Sin Env.
C1

Sin asignar
C2

Asignado
C3

Necesidad de datos
C4

Conectado
C5

Instrucción
C6

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

SQLGetInfo

C0

Sin Env.
C1

Sin asignar
C2

Asignado
C3

Necesidad de datos
C4

Conectado
C5

Instrucción
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

Sin Env.
C1

Sin asignar
C2

Asignado
C3

Necesidad de datos
C4

Conectado
C5

Instrucción
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

Sin Env.
C1

Sin asignar
C2

Asignado
C3

Necesidad de datos
C4

Conectado
C5

Instrucción
C6

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

SQLPrepare

C0

Sin Env.
C1

Sin asignar
C2

Asignado
C3

Necesidad de datos
C4

Conectado
C5

Instrucción
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

Sin Env.
C1

Sin asignar
C2

Asignado
C3

Necesidad de datos
C4

Conectado
C5

Instrucción
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 el establecimiento de este atributo confirmó la transacción.

SQLSetEnvAttr

C0

Sin Env.
C1

Sin asignar
C2

Asignado
C3

Necesidad de datos
C4

Conectado
C5

Instrucción
C6

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

Todas las demás funciones ODBC

C0

Sin Env.
C1

Sin asignar
C2

Asignado
C3

Necesidad de datos
C4

Conectado
C5

Instrucción
C6

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