Clase CDBException

Representa una condición de excepción que surge de las clases de base de datos.

Sintaxis

class CDBException : public CException

Miembros

Miembros de datos públicos

Nombre Descripción
CDBException::m_nRetCode Contiene un código de retorno de conectividad abierta de bases de datos (ODBC), del tipo RETCODE.
CDBException::m_strError Contiene una cadena que describe el error en términos alfanuméricos.
CDBException::m_strStateNativeOrigin Contiene una cadena que describe el error en términos de los códigos de error devueltos por ODBC.

Comentarios

La clase incluye dos miembros de datos públicos que puede usar para determinar la causa de la excepción o para mostrar un mensaje de texto que describa la excepción. Los objetos CDBException se crean e inician mediante funciones miembro de las clases de base de datos.

Nota:

Esta clase es una de las clases de conectividad abierta de bases de datos (ODBC) de MFC. Si va a utilizar las clases más recientes de objetos de acceso a datos (DAO), use CDaoException en su lugar. Todos los nombres de clases de DAO tienen "CDao" como prefijo. Para más información, consulte el artículo Información general: programación de bases de datos.

Las excepciones son casos de ejecución anómala que implican condiciones que están fuera del control del programa, como errores de E/S de origen de datos o de red. Aquellos errores que son previsibles en el curso normal de la ejecución del programa normalmente no se consideran excepciones.

Se puede acceder a estos objetos dentro del ámbito de una expresión CATCH. También se pueden iniciar objetos CDBException desde su propio código con la función global AfxThrowDBException.

Para más información sobre el control de excepciones en general o sobre los objetos CDBException, vea los artículos Control de excepciones (MFC) y Excepciones: Excepciones de base de datos.

Jerarquía de herencia

CObject

CException

CDBException

Requisitos

Encabezado: afxdb.h

CDBException::m_nRetCode

Contiene un código de error de ODBC del tipo RETCODE devuelto por una función de interfaz de programación de aplicaciones (API) de ODBC.

Comentarios

Este tipo incluye códigos con prefijo SQL definidos por ODBC y códigos con prefijo AFX_SQL definidos por las clases de base de datos. Para una CDBException, este miembro contendrá uno de los valores siguientes:

  • AFX_SQL_ERROR_API_CONFORMANCE: el controlador de una llamada a CDatabase::OpenEx o CDatabase::Open no se ajusta al nivel 1 de conformidad requerido de la API de ODBC (SQL_OAC_LEVEL1).

  • AFX_SQL_ERROR_CONNECT_FAIL: error de conexión al origen de datos. Ha pasado un puntero nulo CDatabase al constructor del conjunto de registros y se ha producido un error en el intento posterior de crear una conexión basada en GetDefaultConnect.

  • AFX_SQL_ERROR_DATA_TRUNCATED: ha solicitado más datos que aquellos para los que ha proporcionado almacenamiento. Para más información sobre cómo aumentar el almacenamiento de datos proporcionado para los tipos de datos CString o CByteArray, consulte el argumento nMaxLength para RFX_Text y RFX_Binary en "Macros y variables globales".

  • AFX_SQL_ERROR_DYNASET_NOT_SUPPORTED: error en una llamada a CRecordset::Open para solicitar un conjunto de registros dinámicos. El controlador no admite conjuntos de registros dinámicos.

  • AFX_SQL_ERROR_EMPTY_COLUMN_LIST: ha intentado abrir una tabla (o lo que ha proporcionado no se pudo identificar como una llamada de procedimiento o instrucción SELECT), pero no hay columnas identificadas en las llamadas de función de intercambio de campos de registro (RFX) en la invalidación de DoFieldExchange.

  • AFX_SQL_ERROR_FIELD_SCHEMA_MISMATCH: el tipo de una función RFX de la invalidación DoFieldExchange no es compatible con el tipo de datos de columna del conjunto de registros.

  • AFX_SQL_ERROR_ILLEGAL_MODE: ha llamado a CRecordset::Update sin llamar previamente a CRecordset::AddNew o CRecordset::Edit.

  • AFX_SQL_ERROR_LOCK_MODE_NOT_SUPPORTED: no se pudo cumplir la solicitud de bloqueo de registros de la actualización porque el controlador ODBC no admite el bloqueo.

  • AFX_SQL_ERROR_MULTIPLE_ROWS_AFFECTED: ha llamado a CRecordset::Update o Delete para una tabla sin clave única y ha cambiado varios registros.

  • AFX_SQL_ERROR_NO_CURRENT_RECORD: ha intentado editar o eliminar un registro eliminado anteriormente. Debe desplazarse a un nuevo registro actual después de una eliminación.

  • AFX_SQL_ERROR_NO_POSITIONED_UPDATES: no se pudo cumplir la solicitud de un conjunto de registros dinámicos porque el controlador ODBC no admite actualizaciones posicionadas.

  • AFX_SQL_ERROR_NO_ROWS_AFFECTED: ha llamado a CRecordset::Update o Delete, pero cuando se inició la operación, ya no se pudo encontrar el registro.

  • AFX_SQL_ERROR_ODBC_LOAD_FAILED: error al intentar cargar el archivo ODBC.DLL; Windows no pudo encontrar o no pudo cargar este archivo DLL. Este error es irrecuperable.

  • AFX_SQL_ERROR_ODBC_V2_REQUIRED: no se pudo cumplir la solicitud de un conjunto de registros dinámicos porque se requiere un controlador ODBC compatible con el nivel 2.

  • AFX_SQL_ERROR_RECORDSET_FORWARD_ONLY: un intento de desplazamiento no se realizó correctamente porque el origen de datos no admite el desplazamiento hacia atrás.

  • AFX_SQL_ERROR_SNAPSHOT_NOT_SUPPORTED: error en una llamada a CRecordset::Open para solicitar una instantánea. El controlador no admite instantáneas. (Esto solo debería suceder si la biblioteca de cursores ODBC ODBCCURS.DLL no está presente).

  • AFX_SQL_ERROR_SQL_CONFORMANCE: el controlador de una llamada a CDatabase::OpenEx o CDatabase::Open no se ajusta al nivel "Mínimo" de conformidad de ODBC SQL requerido (SQL_OSC_MINIMUM).

  • AFX_SQL_ERROR_SQL_NO_TOTAL: el controlador ODBC no pudo especificar el tamaño total de un valor de datos CLongBinary. El error en la operación se ha producido probablemente porque no se pudo asignar previamente un bloque de memoria global.

  • AFX_SQL_ERROR_RECORDSET_READONLY: ha intentado actualizar un conjunto de registros de solo lectura o el origen de datos es de solo lectura. No se puede realizar ninguna operación de actualización con el conjunto de registros o con el objeto CDatabase al que está asociado.

  • SQL_ERROR: se ha producido un error en la función. El mensaje de error devuelto por la función ODBC SQLError se almacena en el miembro de datos m_strError.

  • SQL_INVALID_HANDLE: se ha producido un error en la función debido a un identificador de entorno, de conexión o de instrucción no válidos. Esto indica un error de programación. No hay información adicional disponible de la función ODBC SQLError.

ODBC define los códigos con prefijo SQL. Los códigos con prefijo de AFX se definen en AFXDB.H, que se encuentra en MFC\INCLUDE.

CDBException::m_strError

Contiene una cadena que describe el error que provocó la excepción.

Comentarios

La cadena describe el error en términos alfanuméricos. Para obtener información más detallada y un ejemplo, consulte m_strStateNativeOrigin.

CDBException::m_strStateNativeOrigin

Contiene una cadena que describe el error que provocó la excepción.

Comentarios

La cadena tiene el formato "State:%s,Native:%ld,Origin:%s", donde los códigos de formato, en orden, se reemplazan por valores que describen:

  • SQLSTATE, una cadena terminada en un valor null que contiene un código de error de cinco caracteres devuelto en el parámetro szSqlState de la función ODBC SQLError. Los valores SQLSTATE se enumeran en el Apéndice A, Códigos de error ODBC, de la Referencia del programador de ODBC. Ejemplo: "S0022".

  • Código de error nativo, específico del origen de datos, devuelto en el parámetro pfNativeError de la función SQLError. Ejemplo: 207.

  • Texto del mensaje de error devuelto en el parámetro szErrorMsg de la función SQLError. Este mensaje consta de varios nombres entre corchetes. Como error se pasa de su origen al usuario y cada componente ODBC (origen de datos, controlador o administrador de controladores) anexa su propio nombre. Esta información ayuda a identificar el origen del error. Ejemplo: [Microsoft][ODBC SQL Server Driver][SQL Server]

El marco interpreta la cadena de error y coloca sus componentes en m_strStateNativeOrigin; si m_strStateNativeOrigin contiene información para más de un error, los errores se separan mediante nuevas líneas. El marco coloca el texto alfanumérico del error en m_strError.

Para obtener información adicional sobre los códigos usados para crear esta cadena, consulte la función SQLError en la referencia del programador de ODBC.

Ejemplo

Desde ODBC: "State:S0022,Native:207,Origin:[Microsoft][ODBC SQL Server Driver][SQL Server] Nombre de columna "ColName" no válido"

En m_strStateNativeOrigin: "State:S0022,Native:207,Origin:[Microsoft][ODBC SQL Server Driver][SQL Server]"

En m_strError: "Nombre de columna "ColName" no válido"

Consulte también

CException (clase)
Gráfico de jerarquías
CDatabase (clase)
CRecordset (clase)
CFieldExchange (clase)
CRecordset::Update
CRecordset::Delete
CException (clase)