Función SQLGetConnectAttr

Conformidad
Versión introducida: Cumplimiento de estándares odbc 3.0: ISO 92

Resumen
SQLGetConnectAttr devuelve la configuración actual de un atributo de conexión.

Nota

Para obtener más información sobre lo que asigna el Administrador de controladores a esta función cuando una aplicación ODBC 3*.x* está trabajando con un controlador ODBC 2*.x*, vea Mapping Replacement Functions for Backward Compatibility of Applications.

Sintaxis

  
SQLRETURN SQLGetConnectAttr(  
     SQLHDBC        ConnectionHandle,  
     SQLINTEGER     Attribute,  
     SQLPOINTER     ValuePtr,  
     SQLINTEGER     BufferLength,  
     SQLINTEGER *   StringLengthPtr);  

Argumentos

ConnectionHandle
[Entrada] Identificador de conexión.

Atributo
[Entrada] Atributo que se va a recuperar.

ValuePtr
[Salida] Puntero a la memoria en la que se va a devolver el valor actual del atributo especificado por Attribute. En el caso de los atributos de tipo entero, algunos controladores solo pueden escribir el bit inferior de 32 o 16 bits de un búfer y dejar el bit de orden superior sin cambios. Por lo tanto, las aplicaciones deben usar un búfer de SQLULEN e inicializar el valor en 0 antes de llamar a esta función.

Si ValuePtr es NULL, StringLengthPtr seguirá devolviendo el número total de bytes (excepto el carácter de terminación NULL para los datos de caracteres) disponible para devolver en el búfer al que apunta ValuePtr.

BufferLength
[Entrada] Si Attribute es un atributo definido por ODBC y ValuePtr apunta a una cadena de caracteres o a un búfer binario, este argumento debe ser la longitud de *ValuePtr. Si Attribute es un atributo definido por ODBC y *ValuePtr es un entero, BufferLength se omite. Si el valor de *ValuePtr es una cadena Unicode (al llamar a SQLGetConnectAttrW), el argumento BufferLength debe ser un número par.

Si Attribute es un atributo definido por el controlador, la aplicación indica la naturaleza del atributo en el Administrador de controladores estableciendo el argumento BufferLength . BufferLength puede tener los siguientes valores:

  • Si *ValuePtr es un puntero a una cadena de caracteres, BufferLength es la longitud de la cadena.

  • Si *ValuePtr es un puntero a un búfer binario, la aplicación coloca el resultado de la macro SQL_LEN_BINARY_ATTR(length) en BufferLength. Esto coloca un valor negativo en BufferLength.

  • Si *ValuePtr es un puntero a un valor distinto de una cadena de caracteres o una cadena binaria, BufferLength debe tener el valor SQL_IS_POINTER.

  • Si *ValuePtr contiene un tipo de datos de longitud fija, BufferLength es SQL_IS_INTEGER o SQL_IS_UINTEGER, según corresponda.

StringLengthPtr
[Salida] Puntero a un búfer en el que devolver el número total de bytes (excepto el carácter de terminación NULL) disponible para devolver en *ValuePtr. Si el valor del atributo es una cadena de caracteres y el número de bytes disponibles para devolver es mayor que BufferLength menos la longitud del carácter de terminación null, los datos de *ValuePtr se truncan en BufferLength menos la longitud del carácter de terminación null y el controlador termina en null.

Devoluciones

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_NO_DATA, SQL_ERROR o SQL_INVALID_HANDLE.

Diagnóstico

Cuando SQLGetConnectAttr devuelve SQL_ERROR o SQL_SUCCESS_WITH_INFO, se puede obtener un valor SQLSTATE asociado de la estructura de datos de diagnóstico llamando a SQLGetDiagRec con un HandleType de SQL_HANDLE_DBC y un identificador de ConnectionHandle. En la tabla siguiente se enumeran los valores SQLSTATE devueltos normalmente por SQLGetConnectAttr y se explica cada uno en el contexto de esta función; la notación "(DM)" precede a las descripciones de SQLSTATEs devueltas por el Administrador de controladores. El código de retorno asociado a cada valor SQLSTATE es SQL_ERROR, a menos que se indique lo contrario.

SQLSTATE Error Descripción
01000 Advertencia general Mensaje informativo específico del controlador. (Function devuelve SQL_SUCCESS_WITH_INFO).
01004 Datos de cadena, truncados a la derecha Los datos devueltos en *ValuePtr se truncaron para ser BufferLength menos la longitud de un carácter de terminación NULL. La longitud del valor de cadena sintruir se devuelve en *StringLengthPtr. (Function devuelve SQL_SUCCESS_WITH_INFO).
08003 Conexión no abierta (DM) Se especificó un valor de atributo que requería una conexión abierta.
08S01 Error de vínculo de comunicación Se produjo un error en el vínculo de comunicación entre el controlador y el origen de datos al que se conectó el controlador antes de que la función completara el procesamiento.
HY000 Error general Se produjo un error para el que no había ningún SQLSTATE específico y para el que no se definió SQLSTATE específico de la implementación. El mensaje de error devuelto de la estructura de datos de diagnóstico por el argumento MessageText en SQLGetDiagField describe el error y su causa.
HY001 Error de asignación de memoria El controlador no pudo asignar memoria necesaria para admitir la ejecución o finalización de la función.
HY010 Error de secuencia de función Se llamó a SQLBrowseConnect (DM) para ConnectionHandle y devolvió SQL_NEED_DATA. Se llamó a esta función antes de que SQLBrowseConnect devolva SQL_SUCCESS_WITH_INFO o SQL_SUCCESS.

(DM) SE llamó a SQLExecute, SQLExecDirect o SQLMoreResults para connectionHandle y devolvió SQL_PARAM_DATA_AVAILABLE. Se llamó a esta función antes de recuperar los datos para todos los parámetros transmitidos.
HY013 Error de administración de memoria No se pudo procesar la llamada de función porque no se pudo acceder a los objetos de memoria subyacentes, posiblemente debido a condiciones de memoria baja.
HY090 Longitud de búfer o cadena no válida (DM) *ValuePtr es una cadena de caracteres y BufferLength era menor que cero, pero no igual que SQL_NTS.
HY092 Identificador de atributo o opción no válido El valor especificado para el argumento Attribute no era válido para la versión de ODBC compatible con el controlador.
HY114 El controlador no admite la ejecución de funciones asincrónicas de nivel de conexión (DM) Una aplicación intentó habilitar la ejecución de funciones asincrónicas con SQL_ATTR_ASYNC_DBC_FUNCTIONS_ENABLE para un controlador que no admite operaciones de conexión asincrónicas.
HY117 La conexión se suspende debido a un estado de transacción desconocido. Solo se permiten funciones de desconexión y de solo lectura. (DM) Para obtener más información sobre el estado suspendido, vea Función SQLEndTran.
HYC00 Característica opcional no implementada El valor especificado para el argumento Attribute era un atributo de conexión ODBC válido para la versión de ODBC compatible con el controlador, pero no era compatible con el controlador.
HYT01 Se ha agotado el tiempo de espera de la conexión. El período de tiempo de espera de conexión expiró antes de que el origen de datos respondiera a la solicitud. El período de tiempo de espera de conexión se establece a través de SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT.
IM001 El controlador no admite esta función (DM) El controlador que corresponde a ConnectionHandle no admite la función .

Comentarios

Para obtener información general sobre los atributos de conexión, vea Atributos de conexión.

Para obtener una lista de atributos que se pueden establecer, consulte SQLSetConnectAttr. Observe que si Attribute especifica un atributo que devuelve una cadena, ValuePtr debe ser un puntero a un búfer para la cadena. La longitud máxima de la cadena devuelta, incluido el carácter de terminación NULL, será BufferLength bytes.

Según el atributo , una aplicación no tiene que establecer una conexión antes de llamar a SQLGetConnectAttr. Sin embargo, si se llama a SQLGetConnectAttr y el atributo especificado no tiene un valor predeterminado y no se ha establecido mediante una llamada anterior a SQLSetConnectAttr, SQLGetConnectAttr devolverá SQL_NO_DATA.

Si Attribute es SQL_ATTR_ TRACE o SQL_ATTR_ TRACEFILE, ConnectionHandle no tiene que ser válido y SQLGetConnectAttr no devolverá SQL_ERROR ni SQL_INVALID_HANDLE si ConnectionHandle no es válido. Estos atributos se aplican a todas las conexiones. SQLGetConnectAttr devolverá SQL_ERROR o SQL_INVALID_HANDLE si otro argumento no es válido.

Aunque una aplicación puede establecer atributos de instrucción mediante SQLSetConnectAttr, una aplicación no puede usar SQLGetConnectAttr para recuperar valores de atributo de instrucción; debe llamar a SQLGetStmtAttr para recuperar la configuración de los atributos de instrucción.

Tanto SQL_ATTR_AUTO_IPD como SQL_ATTR_CONNECTION_DEAD atributos de conexión se pueden devolver mediante una llamada a SQLGetConnectAttr , pero no se puede establecer mediante una llamada a SQLSetConnectAttr.

Nota

No hay compatibilidad asincrónica con SQLGetConnectAttr. Al implementar SQLGetConnectAttr, un controlador puede mejorar el rendimiento minimizando el número de veces que se envía o solicita información desde el servidor.

Para información acerca de Vea
Devolver la configuración de un atributo de instrucción Función SQLGetStmtAttr
Establecimiento de un atributo de conexión Función SQLSetConnectAttr
Establecimiento de un atributo de entorno Función SQLSetEnvAttr
Establecimiento de un atributo de instrucción Función SQLSetStmtAttr

Consulte también

Referencia de API ODBC
Archivos de encabezado de ODBC