Función SQLGetDiagField

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

Resumen
SQLGetDiagField devuelve el valor actual de un campo de un registro de la estructura de datos de diagnóstico (asociada a un identificador especificado) que contiene información de error, advertencia y estado.

Sintaxis


SQLRETURN SQLGetDiagField(  
     SQLSMALLINT     HandleType,  
     SQLHANDLE       Handle,  
     SQLSMALLINT     RecNumber,  
     SQLSMALLINT     DiagIdentifier,  
     SQLPOINTER      DiagInfoPtr,  
     SQLSMALLINT     BufferLength,  
     SQLSMALLINT *   StringLengthPtr);  

Argumentos

HandleType
[Entrada] Identificador de tipo de identificador que describe el tipo de identificador para el que se requieren diagnósticos. Debe ser una de las siguientes:

  • SQL_HANDLE_DBC

  • SQL_HANDLE_DBC_INFO_TOKEN

  • SQL_HANDLE_DESC

  • SQL_HANDLE_ENV

  • SQL_HANDLE_STMT

SQL_HANDLE_DBC_INFO_TOKEN controlador solo lo usa el Administrador de controladores y el controlador. Las aplicaciones no deben usar este tipo de identificador. Para obtener más información sobre SQL_HANDLE_DBC_INFO_TOKEN, vea Developing Connection-Pool Awareness in an ODBC Driver.

Handle
[Entrada] Identificador de la estructura de datos de diagnóstico, del tipo indicado por HandleType. Si HandleType es SQL_HANDLE_ENV, Handle puede ser un identificador de entorno compartido o no compartido.

RecNumber
[Entrada] Indica el registro de estado desde el que la aplicación busca información. Los registros de estado se numeran de 1. Si el argumento DiagIdentifier indica cualquier campo del encabezado de diagnóstico, se omite RecNumber . Si no es así, debe ser superior a 0.

DiagIdentifier
[Entrada] Indica el campo del diagnóstico cuyo valor se va a devolver. Para obtener más información, vea la sección "Argumento DiagIdentifier " en "Comments".

DiagInfoPtr
[Salida] Puntero a un búfer en el que se va a devolver la información de diagnóstico. El tipo de datos depende del valor de DiagIdentifier. Si DiagInfoPtr es un tipo entero, las aplicaciones deben usar un búfer de SQLULEN e inicializar el valor en 0 antes de llamar a esta función, ya que algunos controladores solo pueden escribir el 32 o 16 bits inferior de un búfer y dejar el bit de orden superior sin cambios.

Si DiagInfoPtr 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 DiagInfoPtr.

BufferLength
[Entrada] Si DiagIdentifier es un diagnóstico definido por ODBC y DiagInfoPtr apunta a una cadena de caracteres o a un búfer binario, este argumento debe ser la longitud de *DiagInfoPtr. Si DiagIdentifier es un campo definido por ODBC y *DiagInfoPtr es un entero, bufferLength se omite. Si el valor de *DiagInfoPtr es una cadena Unicode (al llamar a SQLGetDiagFieldW), el argumento BufferLength debe ser un número par.

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

  • Si DiagInfoPtr es un puntero a una cadena de caracteres, BufferLength es la longitud de la cadena o SQL_NTS.

  • Si DiagInfoPtr 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 DiagInfoPtr 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 *DiagInfoPtr contiene un tipo de datos de longitud fija, BufferLength se SQL_IS_INTEGER, SQL_IS_UINTEGER, SQL_IS_SMALLINT o SQL_IS_USMALLINT, según corresponda.

StringLengthPtr
[Salida] Puntero a un búfer en el que devolver el número total de bytes (excepto el número de bytes necesarios para el carácter de terminación NULL) disponible para devolver en *DiagInfoPtr, para los datos de caracteres. Si el número de bytes disponibles para devolver es mayor o igual que BufferLength, el texto de *DiagInfoPtr se trunca en BufferLength menos la longitud de un carácter de terminación NULL.

Devoluciones

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, SQL_INVALID_HANDLE o SQL_NO_DATA.

Diagnóstico

SQLGetDiagField no publica registros de diagnóstico por sí mismos. Usa los siguientes valores devueltos para notificar el resultado de su propia ejecución:

  • SQL_SUCCESS: la función devolvió correctamente la información de diagnóstico.

  • SQL_SUCCESS_WITH_INFO: *DiagInfoPtr era demasiado pequeño para contener el campo de diagnóstico solicitado. Por lo tanto, los datos del campo de diagnóstico se truncaron. Para determinar que se ha producido un truncamiento, la aplicación debe comparar BufferLength con el número real de bytes disponibles, que se escribe en *StringLengthPtr.

  • SQL_INVALID_HANDLE: el identificador indicado por HandleType y Handle no era un identificador válido.

  • SQL_ERROR: se produjo una de las siguientes acciones:

    • El argumento DiagIdentifier no era uno de los valores válidos.

    • El argumento DiagIdentifier se SQL_DIAG_CURSOR_ROW_COUNT, SQL_DIAG_DYNAMIC_FUNCTION, SQL_DIAG_DYNAMIC_FUNCTION_CODE o SQL_DIAG_ROW_COUNT, pero Handle no era un identificador de instrucción. (El Administrador de controladores devuelve este diagnóstico).

    • El argumento RecNumber fue negativo o 0 cuando DiagIdentifier indicó un campo de un registro de diagnóstico. RecNumber se omite para los campos de encabezado.

    • El valor solicitado era una cadena de caracteres y BufferLength era menor que cero.

    • Cuando se usa una notificación asincrónica, no se completó la operación asincrónica en el identificador.

  • SQL_NO_DATA: RecNumber era mayor que el número de registros de diagnóstico que existían para el identificador especificado en Handle. La función también devuelve SQL_NO_DATA para cualquier RecNumber positivo si no hay registros de diagnóstico para Handle.

Comentarios

Normalmente, una aplicación llama a SQLGetDiagField para lograr uno de los tres objetivos:

  1. Para obtener información específica sobre errores o advertencias cuando una llamada de función ha devuelto SQL_ERROR o SQL_SUCCESS_WITH_INFO (o SQL_NEED_DATA para la función SQLBrowseConnect ).

  2. Para determinar el número de filas del origen de datos que se vieron afectadas cuando se realizaron operaciones de inserción, eliminación o actualización con una llamada a SQLExecute, SQLExecDirect, SQLBulkOperations o SQLSetPos (desde el campo de encabezado SQL_DIAG_ROW_COUNT) o para determinar el número de filas que existen en el cursor abierto actual, si el controlador puede proporcionar esta información (desde el campo de encabezado SQL_DIAG_CURSOR_ROW_COUNT).

  3. Para determinar qué función se ejecutó mediante una llamada a SQLExecDirect o SQLExecute (de los campos de encabezado SQL_DIAG_DYNAMIC_FUNCTION y SQL_DIAG_DYNAMIC_FUNCTION_CODE).

Cualquier función ODBC puede publicar cero o más registros de diagnóstico cada vez que se llama, por lo que una aplicación puede llamar a SQLGetDiagField después de cualquier llamada a función ODBC. No hay ningún límite en el número de registros de diagnóstico que se pueden almacenar en cualquier momento. SQLGetDiagField recupera solo la información de diagnóstico asociada más recientemente a la estructura de datos de diagnóstico especificada en el argumento Handle . Si la aplicación llama a una función ODBC distinta de SQLGetDiagField o SQLGetDiagRec, se pierde cualquier información de diagnóstico de una llamada anterior con el mismo identificador.

Una aplicación puede examinar todos los registros de diagnóstico incrementando RecNumber, siempre y cuando SQLGetDiagField devuelva SQL_SUCCESS. El número de registros de estado se indica en el campo de encabezado SQL_DIAG_NUMBER. Las llamadas a SQLGetDiagField no son destructivas para los campos de encabezado y registro. La aplicación puede llamar a SQLGetDiagField de nuevo más tarde para recuperar un campo de un registro, siempre y cuando no se haya llamado a una función distinta de las funciones de diagnóstico en el período intermedio, lo que publicaría registros en el mismo identificador.

Una aplicación puede llamar a SQLGetDiagField para devolver cualquier campo de diagnóstico en cualquier momento, excepto por SQL_DIAG_CURSOR_ROW_COUNT o SQL_DIAG_ROW_COUNT, que devolverá SQL_ERROR si Handle no es un identificador de instrucción. Si cualquier otro campo de diagnóstico no está definido, la llamada a SQLGetDiagField devolverá SQL_SUCCESS (siempre que no se encuentre ningún otro diagnóstico) y se devuelve un valor indefinido para el campo.

Para obtener más información, vea Uso de SQLGetDiagRec y SQLGetDiagField e Implementación de SQLGetDiagRec y SQLGetDiagField.

Al llamar a una API distinta de la que se ejecuta de forma asincrónica, se generará el error de secuencia de función HY010. Sin embargo, el registro de error no se puede recuperar antes de que se complete la operación asincrónica.

Argumento HandleType

Cada tipo de identificador puede tener información de diagnóstico asociada. El argumento HandleType indica el tipo de identificador de Handle.

Algunos campos de encabezado y registro no se pueden devolver para los identificadores de entorno, conexión, instrucción y descriptor. Estos identificadores para los que un campo no es aplicable se indican en las secciones "Campos de encabezado" y "Campos de registro" siguientes.

Si HandleType es SQL_HANDLE_ENV, Handle puede ser un identificador de entorno compartido o no compartido.

Ningún campo de diagnóstico de encabezado específico del controlador debe estar asociado a un identificador de entorno.

Los únicos campos de encabezado de diagnóstico definidos para un identificador de descriptor son SQL_DIAG_NUMBER y SQL_DIAG_RETURNCODE.

Argumento DiagIdentifier

Este argumento indica el identificador del campo necesario a partir de la estructura de datos de diagnóstico. Si RecNumber es mayor o igual que 1, los datos del campo describen la información de diagnóstico devuelta por una función. Si RecNumber es 0, el campo se encuentra en el encabezado de la estructura de datos de diagnóstico y, por tanto, contiene datos relativos a la llamada de función que devolvió la información de diagnóstico, no a la información específica.

Los controladores pueden definir campos de registro y encabezado específicos del controlador en la estructura de datos de diagnóstico.

Una aplicación ODBC 3*.x* que trabaje con un controlador ODBC 2*.x* podrá llamar a SQLGetDiagField solo con un argumento DiagIdentifier de SQL_DIAG_CLASS_ORIGIN, SQL_DIAG_CLASS_SUBCLASS_ORIGIN, SQL_DIAG_CONNECTION_NAME, SQL_DIAG_MESSAGE_TEXT, SQL_DIAG_NATIVE, SQL_DIAG_NUMBER, SQL_DIAG_RETURNCODE, SQL_DIAG_SERVER_NAME o SQL_DIAG_SQLSTATE. Todos los demás campos de diagnóstico devolverán SQL_ERROR.

Campos de encabezado

Los campos de encabezado enumerados en la tabla siguiente se pueden incluir en el argumento DiagIdentifier .

DiagIdentifier Tipo de valor devuelto Devoluciones
SQL_DIAG_CURSOR_ROW_COUNT SQLLEN Este campo contiene el recuento de filas en el cursor. Su semántica depende de los tipos de información SQLGetInfo SQL_DYNAMIC_CURSOR_ATTRIBUTES2, SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2, SQL_KEYSET_CURSOR_ATTRIBUTES2 y SQL_STATIC_CURSOR_ATTRIBUTES2, que indican qué recuentos de filas están disponibles para cada tipo de cursor (en los bits SQL_CA2_CRC_EXACT y SQL_CA2_CRC_APPROXIMATE).

El contenido de este campo solo se define para los identificadores de instrucción y solo se ha llamado a SQLExecute, SQLExecDirect o SQLMoreResults . Al llamar a SQLGetDiagField con un DiagIdentifier de SQL_DIAG_CURSOR_ROW_COUNT en otro que no sea un identificador de instrucción, se devolverá SQL_ERROR.
SQL_DIAG_DYNAMIC_FUNCTION SQLCHAR * Se trata de una cadena que describe la instrucción SQL que ejecutó la función subyacente. (Vea "Valores de los campos de función dinámica", más adelante en esta sección, para obtener valores específicos). El contenido de este campo solo se define para los identificadores de instrucción y solo después de una llamada a SQLExecute, SQLExecDirect o SQLMoreResults. Al llamar a SQLGetDiagField con un diagIdentifier de SQL_DIAG_DYNAMIC_FUNCTION en otro que no sea un identificador de instrucción, se devolverá SQL_ERROR. El valor de este campo no está definido antes de una llamada a SQLExecute o SQLExecDirect.
SQL_DIAG_DYNAMIC_FUNCTION_CODE SQLINTEGER Se trata de un código numérico que describe la instrucción SQL ejecutada por la función subyacente. (Vea "Valores de los campos de función dinámica", más adelante en esta sección, para obtener un valor específico). El contenido de este campo solo se define para los identificadores de instrucción y solo después de una llamada a SQLExecute, SQLExecDirect o SQLMoreResults. Al llamar a SQLGetDiagField con un diagIdentifier de SQL_DIAG_DYNAMIC_FUNCTION_CODE en otro que no sea un identificador de instrucción, se devolverá SQL_ERROR. El valor de este campo no está definido antes de una llamada a SQLExecute o SQLExecDirect.
SQL_DIAG_NUMBER SQLINTEGER Número de registros de estado disponibles para el identificador especificado.
SQL_DIAG_RETURNCODE SQLRETURN Devuelve el código devuelto por la función . Para obtener una lista de códigos de retorno, vea Códigos de retorno. El controlador no tiene que implementar SQL_DIAG_RETURNCODE; siempre se implementa mediante el Administrador de controladores. Si aún no se ha llamado a ninguna función en el identificador, se devolverá SQL_SUCCESS para SQL_DIAG_RETURNCODE.
SQL_DIAG_ROW_COUNT SQLLEN Número de filas afectadas por una inserción, eliminación o actualización realizada por SQLExecute, SQLExecDirect, SQLBulkOperations o SQLSetPos. Se define el controlador después de ejecutar una especificación de cursor . El contenido de este campo solo se define para los identificadores de instrucción. Al llamar a SQLGetDiagField con un DiagIdentifier de SQL_DIAG_ROW_COUNT en otro que no sea un identificador de instrucción, se devolverán SQL_ERROR. Los datos de este campo también se devuelven en el argumento RowCountPtr de SQLRowCount. Los datos de este campo se restablecen después de cada llamada de función no independiente, mientras que el recuento de filas devuelto por SQLRowCount sigue siendo el mismo hasta que la instrucción se vuelve a establecer en el estado preparado o asignado.

Campos de registro

Los campos de registro enumerados en la tabla siguiente se pueden incluir en el argumento DiagIdentifier .

DiagIdentifier Tipo de valor devuelto Devoluciones
SQL_DIAG_CLASS_ORIGIN SQLCHAR * Cadena que indica el documento que define la parte de clase del valor SQLSTATE en este registro. Su valor es "ISO 9075" para todos los SQLSTATEs definidos por la interfaz de nivel de llamada OPEN Group e ISO. Para SQLSTATEs específicos de ODBC (todos aquellos cuya clase SQLSTATE es "IM"), su valor es "ODBC 3.0".
SQL_DIAG_COLUMN_NUMBER SQLINTEGER Si el campo SQL_DIAG_ROW_NUMBER es un número de fila válido en un conjunto de filas o un conjunto de parámetros, este campo contiene el valor que representa el número de columna en el conjunto de resultados o el número de parámetro del conjunto de parámetros. Los números de columna del conjunto de resultados siempre comienzan en 1; si este registro de estado pertenece a una columna de marcador, el campo puede ser cero. Los números de parámetro comienzan en 1. Tiene el valor SQL_NO_COLUMN_NUMBER si el registro de estado no está asociado a un número de columna o número de parámetro. Si el controlador no puede determinar el número de columna o el número de parámetro al que está asociado este registro, este campo tiene el valor SQL_COLUMN_NUMBER_UNKNOWN.

El contenido de este campo solo se define para los identificadores de instrucción.
SQL_DIAG_CONNECTION_NAME SQLCHAR * Cadena que indica el nombre de la conexión a la que se relaciona el registro de diagnóstico. Este campo está definido por el controlador. Para las estructuras de datos de diagnóstico asociadas al identificador del entorno y para los diagnósticos que no se relacionan con ninguna conexión, este campo es una cadena de longitud cero.
SQL_DIAG_MESSAGE_TEXT SQLCHAR * Un mensaje informativo sobre el error o la advertencia. Este campo tiene el formato descrito en Mensajes de diagnóstico. No hay ninguna longitud máxima para el texto del mensaje de diagnóstico.
SQL_DIAG_NATIVE SQLINTEGER Código de error nativo específico del origen de datos o controlador. Si no hay código de error nativo, el controlador devuelve 0.
SQL_DIAG_ROW_NUMBER SQLLEN Este campo contiene el número de fila del conjunto de filas o el número de parámetro del conjunto de parámetros, con el que está asociado el registro de estado. Los números de fila y los números de parámetro comienzan por 1. Este campo tiene el valor SQL_NO_ROW_NUMBER si este registro de estado no está asociado a un número de fila o a un número de parámetro. Si el controlador no puede determinar el número de fila o el número de parámetro al que está asociado este registro, este campo tiene el valor SQL_ROW_NUMBER_UNKNOWN.

El contenido de este campo solo se define para los identificadores de instrucción.
SQL_DIAG_SERVER_NAME SQLCHAR * Cadena que indica el nombre del servidor al que se relaciona el registro de diagnóstico. Es el mismo que el valor devuelto para una llamada a SQLGetInfo con la opción SQL_DATA_SOURCE_NAME. Para las estructuras de datos de diagnóstico asociadas al identificador de entorno y para los diagnósticos que no se relacionan con ningún servidor, este campo es una cadena de longitud cero.
SQL_DIAG_SQLSTATE SQLCHAR * Código de diagnóstico de SQLSTATE de cinco caracteres. Para obtener más información, vea SQLSTATEs.
SQL_DIAG_SUBCLASS_ORIGIN SQLCHAR * Cadena con el mismo formato y valores válidos que SQL_DIAG_CLASS_ORIGIN, que identifica la parte que define la parte de la subclase del código SQLSTATE. Las SQLSTATES específicas de ODBC para las que se devuelve "ODBC 3.0" incluyen lo siguiente:

01S00, 01S01, 01S02, 01S06, 01S07, 07S01, 08S01, 21S01, 21S02, 25S01, 25S02, 25S03, 42S01, 42S02, 42S11, 42S12, 42S21, 42S22, HY095, HY097, HY098, HY099, HY100, HY101, HY105, HY107, HY109, HY110, HY111, HYT00, HYT01, IM001, IM002, IM003, IM004, IM005, IM006, IM007, IM008, IM010, IM011, IM012.

Valores de los campos de función dinámica

En la tabla siguiente se describen los valores de SQL_DIAG_DYNAMIC_FUNCTION y SQL_DIAG_DYNAMIC_FUNCTION_CODE que se aplican a cada tipo de instrucción SQL ejecutada por una llamada a SQLExecute o SQLExecDirect. El controlador puede agregar valores definidos por el controlador a los enumerados.

Instrucción SQL

Ejecutado
Valor de

SQL_DIAG_DYNAMIC_FUNCTION
Valor de

SQL_DIAG_DYNAMIC_FUNCTION_CODE
alter-domain-statement "ALTER DOMAIN" SQL_DIAG_ALTER_DOMAIN
alter-table-statement "ALTER TABLE" SQL_DIAG_ALTER_TABLE
definición de aserción "CREATE ASSERTION" SQL_DIAG_CREATE_ASSERTION
character-set-definition "CREAR JUEGO DE CARACTERES" SQL_DIAG_CREATE_CHARACTER_SET
definición de intercalación "CREAR INTERCALACIÓN" SQL_DIAG_CREATE_COLLATION
domainn-definition "CREATE DOMAIN" SQL_DIAG_CREATE_DOMAIN
create-index-statement "CREATE INDEX" SQL_DIAG_CREATE_INDEX
create-table-statement "CREATE TABLE" SQL_DIAG_CREATE_TABLE
create-view-statement "CREATE VIEW" SQL_DIAG_CREATE_VIEW
cursor-specification "SELECT CURSOR" SQL_DIAG_SELECT_CURSOR
delete-statement-positioned "CURSOR DE ELIMINACIÓN DINÁMICA" SQL_DIAG_DYNAMIC_DELETE_CURSOR
delete-statement-searched "DELETE WHERE" SQL_DIAG_DELETE_WHERE
drop-assertion-statement "DROP ASSERTION" SQL_DIAG_DROP_ASSERTION
drop-character-set-stmt "DROP CHARACTER SET" SQL_DIAG_DROP_CHARACTER_SET
drop-collation-statement "COLOCAR INTERCALACIÓN" SQL_DIAG_DROP_COLLATION
drop-domain-statement "DROP DOMAIN" SQL_DIAG_DROP_DOMAIN
drop-index-statement "DROP INDEX" SQL_DIAG_DROP_INDEX
drop-schema-statement "DROP SCHEMA" SQL_DIAG_DROP_SCHEMA
drop-table-statement "DROP TABLE" SQL_DIAG_DROP_TABLE
drop-translation-statement "DROP TRANSLATION" SQL_DIAG_DROP_TRANSLATION
drop-view-statement "DROP VIEW" SQL_DIAG_DROP_VIEW
grantstatement "GRANT" SQL_DIAG_GRANT
insert-statement "INSERT" SQL_DIAG_INSERT
ODBC-procedure-extension "CALL" llamada de SQL_DIAG_
revoke-statement "REVOKE" SQL_DIAG_REVOKE
definición de esquema "CREATE SCHEMA" SQL_DIAG_CREATE_SCHEMA
translation-definition "CREATE TRANSLATION" SQL_DIAG_CREATE_TRANSLATION
update-statement-positioned "CURSOR DE ACTUALIZACIÓN DINÁMICA" SQL_DIAG_DYNAMIC_UPDATE_CURSOR
update-statement-searched "UPDATE WHERE" SQL_DIAG_UPDATE_WHERE
Desconocido cadena vacía SQL_DIAG_UNKNOWN_STATEMENT

Secuencia de registros de estado

Los registros de estado se colocan en una secuencia basada en el número de fila y el tipo del diagnóstico. El Administrador de controladores determina el orden final en el que se devuelven los registros de estado que genera. El controlador determina el orden final en el que se devuelven los registros de estado que genera.

Si tanto el Administrador de controladores como el controlador publican registros de diagnóstico, el Administrador de controladores es responsable de ordenarlos.

Si hay dos o más registros de estado, la secuencia de los registros se determina primero por número de fila. Las reglas siguientes se aplican para determinar la secuencia de registros de diagnóstico por fila:

  • Los registros que no corresponden a ninguna fila aparecen delante de los registros que corresponden a una fila determinada, ya que SQL_NO_ROW_NUMBER se define como -1.

  • Los registros para los que se desconoce el número de fila aparecen delante de todos los demás registros, ya que SQL_ROW_NUMBER_UNKNOWN se define como -2.

  • Para todos los registros que pertenecen a filas específicas, los registros se ordenan por el valor del campo SQL_DIAG_ROW_NUMBER. Se muestran todos los errores y advertencias de la primera fila afectada y, a continuación, se muestran todos los errores y advertencias de la siguiente fila afectada, etc.

Nota

El Administrador de controladores ODBC 3*.x* no ordena los registros de estado en la cola de diagnóstico si un controlador ODBC 01S01 (error en fila) se devuelve mediante un controlador ODBC 2*.x* o si SQLSTATE 01S01 (error en fila) se devuelve mediante un controlador ODBC 3*.x* cuando se llama a SQLExtendedFetch o se llama a SQLSetPos en un cursor que se ha colocado con SQLExtendedFetch.

Dentro de cada fila, o para todos los registros que no corresponden a una fila o para la que se desconoce el número de fila, o para todos esos registros con un número de fila igual a SQL_NO_ROW_NUMBER, el primer registro enumerado se determina mediante un conjunto de reglas de ordenación. Después del primer registro, el orden de los demás registros que afectan a una fila no está definido. Una aplicación no puede suponer que los errores preceden a las advertencias después del primer registro. Las aplicaciones deben examinar la estructura de datos de diagnóstico completa para obtener información completa sobre una llamada incorrecta a una función.

Las reglas siguientes se usan para determinar el primer registro dentro de una fila. El registro con el rango más alto es el primer registro. El origen de un registro (Administrador de controladores, controlador, puerta de enlace, etc.) no se tiene en cuenta cuando se clasifican los registros.

  • Errores Los registros de estado que describen los errores tienen la clasificación más alta. Las reglas siguientes se aplican a errores de ordenación:

    • Los registros que indican un error de transacción o un posible error de transacción han salido de todos los demás registros.

    • Si dos o más registros describen la misma condición de error, los SQLSTATEs definidos por la especificación de la CLI de Open Group (clases de 03 a HZ) e SQLSTATEs definidos por el controlador.

  • Valores de datos no definidos por la implementación Los registros de estado que describen los valores sin datos definidos por el controlador (clase 02) tienen la segunda clasificación más alta.

  • Advertencias Los registros de estado que describen advertencias (clase 01) tienen la clasificación más baja. Si dos o más registros describen la misma condición de advertencia, las SQLSTATEs de advertencia definidas por la especificación de la CLI de Open Group desactiven las SQLSTATEs definidas por ODBC y definidas por el controlador.

Para información acerca de Vea
Obtener varios campos de una estructura de datos de diagnóstico Función SQLGetDiagRec

Consulte también

Referencia de API ODBC
Archivos de encabezado de ODBC