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
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
oCDatabase::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 enGetDefaultConnect
.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
oCByteArray
, consulte el argumentonMaxLength
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 aCRecordset::AddNew
oCRecordset::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
oDelete
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
oDelete
, 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
oCDatabase::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 datosm_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)