Класс CDBException
Представляет условие исключения, поступающее от классов базы данных.
Синтаксис
class CDBException : public CException
Участники
Открытые члены данных
Имя | Описание |
---|---|
CDBException::m_nRetCode | Содержит код возврата open Database Connectivity (ODBC) типа RETCODE. |
CDBException::m_strError | Содержит строку, описывающую ошибку в буквенно-цифровых терминах. |
CDBException::m_strStateNativeOrigin | Содержит строку, описывающую ошибку с точки зрения кодов ошибок, возвращаемых ODBC. |
Замечания
Класс включает два открытых члена данных, которые можно использовать для определения причины исключения или отображения текстового сообщения, описывающего исключение. CDBException
объекты создаются и создаются функциями-членами классов базы данных.
Примечание.
Этот класс является одним из классов Open Database Connectivity (ODBC) MFC. Если вместо этого используются новые классы объектов доступа к данным (DAO), используйте вместо этого CDaoException . Все имена классов DAO имеют "CDao" в качестве префикса. Дополнительные сведения см. в статье "Обзор: программирование баз данных".
Исключения — это случаи ненормального выполнения, включающего условия за пределами элемента управления программой, например ошибки источника данных или сетевых операций ввода-вывода. Ошибки, которые могут возникнуть при обычном выполнении программы, обычно не считаются исключениями.
Эти объекты можно получить в области выражения CATCH . Вы также можете создавать CDBException
объекты из собственного кода с помощью глобальной AfxThrowDBException
функции.
Дополнительные сведения об обработке исключений в целом или CDBException
об объектах см. в статьях об обработке исключений (MFC) и исключениях: исключения базы данных.
Иерархия наследования
CDBException
Требования
Заголовок: afxdb.h
CDBException::m_nRetCode
Содержит код ошибки ODBC типа RETCODE, возвращаемый функцией интерфейса программирования приложения ODBC (API).
Замечания
Этот тип включает коды с префиксом SQL, определенные ODBC и AFX_SQL-префиксированные коды, определенные классами базы данных. CDBException
Для этого элемента будет содержаться одно из следующих значений:
AFX_SQL_ERROR_API_CONFORMANCE Драйвер для вызова
CDatabase::Open
не соответствует требуемомуCDatabase::OpenEx
уровню соответствия API ODBC 1 (SQL_OAC_LEVEL1).AFX_SQL_ERROR_CONNECT_FAIL сбой подключения к источнику данных. Указатель NULL
CDatabase
передается конструктору набора записей и последующей попытке создать соединение наGetDefaultConnect
основе сбоя.AFX_SQL_ERROR_DATA_TRUNCATED Вам запрошено больше данных, чем для предоставленного хранилища. Сведения о увеличении предоставленного хранилища данных для
CString
илиCByteArray
типов данных смnMaxLength
. в аргументе RFX_Text и RFX_Binary в разделе "Макросы и глобальные".AFX_SQL_ERROR_DYNASET_NOT_SUPPORTED Вызов запроса
CRecordset::Open
dynaset завершился ошибкой. Dynasets не поддерживается драйвером.AFX_SQL_ERROR_EMPTY_COLUMN_LIST Вы попытались открыть таблицу (или то, что вы предоставили не удалось определить как вызов процедуры или инструкцию SELECT ), но в переопределении нет столбцов, определенных в
DoFieldExchange
функциях обмена полями записей (RFX).AFX_SQL_ERROR_FIELD_SCHEMA_MISMATCH Тип функции RFX в
DoFieldExchange
переопределении несовместим с типом данных столбца в наборе записей.AFX_SQL_ERROR_ILLEGAL_MODE вы позвонили
CRecordset::Update
без ранее вызываемого вызоваCRecordset::AddNew
илиCRecordset::Edit
.AFX_SQL_ERROR_LOCK_MODE_NOT_SUPPORTED Запрос на блокировку записей для обновления не удалось выполнить, так как драйвер ODBC не поддерживает блокировку.
AFX_SQL_ERROR_MULTIPLE_ROWS_AFFECTED Вы вызвали
CRecordset::Update
илиDelete
для таблицы без уникального ключа и изменили несколько записей.AFX_SQL_ERROR_NO_CURRENT_RECORD вы попытались изменить или удалить ранее удаленную запись. После удаления необходимо прокрутить новую текущую запись.
AFX_SQL_ERROR_NO_POSITIONED_UPDATES Не удалось выполнить запрос на использование dynaset, так как драйвер ODBC не поддерживает размещенные обновления.
AFX_SQL_ERROR_NO_ROWS_AFFECTED Вы вызвали
CRecordset::Update
илиDelete
, но когда операция начала операции больше не найдена.AFX_SQL_ERROR_ODBC_LOAD_FAILED Попытка загрузить ODBC.DLL завершилась ошибкой; Windows не удалось найти или не удалось загрузить эту библиотеку DLL. Эта ошибка неустранимая.
AFX_SQL_ERROR_ODBC_V2_REQUIRED Не удалось выполнить запрос на использование dynaset, так как требуется драйвер ODBC уровня 2.
AFX_SQL_ERROR_RECORDSET_FORWARD_ONLY попытка прокрутки не прошла успешно, так как источник данных не поддерживает обратную прокрутку.
AFX_SQL_ERROR_SNAPSHOT_NOT_SUPPORTED Вызов запроса
CRecordset::Open
моментального снимка завершился ошибкой. Моментальные снимки не поддерживаются драйвером. (Это должно происходить только в том случае, если библиотека курсоров ODBC ODBCCURS.DLL отсутствует.)AFX_SQL_ERROR_SQL_CONFORMANCE Драйвер для
CDatabase::OpenEx
вызоваCDatabase::Open
не соответствует требуемому уровню соответствия ODBC SQL "Минимальный" (SQL_OSC_MINIMUM).AFX_SQL_ERROR_SQL_NO_TOTAL Драйвер ODBC не смог указать общий
CLongBinary
размер значения данных. Операция, вероятно, завершилась ошибкой, так как глобальный блок памяти не удалось предварительно найти.AFX_SQL_ERROR_RECORDSET_READONLY Вы попытались обновить набор записей только для чтения или источник данных доступен только для чтения. Операции обновления не могут выполняться с набором записей или
CDatabase
объектом, с которым он связан.SQL_ERROR сбой функции. Сообщение об ошибке, возвращаемое функцией
SQLError
ODBC, хранится в элементеm_strError
данных.SQL_INVALID_HANDLE сбой функции из-за недопустимого дескриптора среды, дескриптора соединения или дескриптора инструкций. Это означает ошибку программирования. Дополнительные сведения не доступны из функции
SQLError
ODBC.
Коды с префиксом SQL определяются ODBC. Коды с префиксом AFX определяются в AFXDB. H, найденный в MFC\INCLUDE.
CDBException::m_strError
Содержит строку, описывающую ошибку, которая вызвала исключение.
Замечания
Строка описывает ошибку в буквенно-цифровых терминах. Дополнительные сведения и пример см. в статье m_strStateNativeOrigin
.
CDBException::m_strStateNativeOrigin
Содержит строку, описывающую ошибку, которая вызвала исключение.
Замечания
Строка имеет форму "State:%s,Native:%ld,Origin:%s", где коды формата, в порядке, заменяются значениями, описывающими:
SQLSTATE, строка, завершающаяся значением NULL, содержащая пятизначный код ошибки, возвращаемый в параметре szSqlState функции
SQLError
ODBC. Значения SQLSTATE перечислены в приложении A, коды ошибок ODBC в справочнике программиста ODBC. Пример: "S0022".Код машинной ошибки, характерный для источника данных, возвращенный в параметре
SQLError
pfNativeError функции. Пример: 207.Текст сообщения об ошибке, возвращенный в параметре
SQLError
szErrorMsg функции. Это сообщение состоит из нескольких скобок. По мере того как ошибка передается из источника пользователю, каждый компонент ODBC (источник данных, драйвер, диспетчер драйверов) добавляет собственное имя. Эта информация помогает определить источник ошибки. Пример: [Microsoft][драйвер SQLBC][SQL Server] [SQL Server]
Платформа интерпретирует строку ошибки и помещает ее компоненты m_strStateNativeOrigin
в ; если m_strStateNativeOrigin
содержит сведения для нескольких ошибок, ошибки разделяются новыми строками. Платформа помещает буквенно-цифровой текст m_strError
ошибки в .
Дополнительные сведения о кодах, используемых для создания этой строки, см . в статье sqlError в справочнике программиста ODBC.
Пример
Из ODBC: "State:S0022,Native:207,Origin:[Microsoft][ODBC SQL Server Driver][SQL Server Driver] [SQL Server] Invalid column name 'ColName'"
In m_strStateNativeOrigin
: "State:S0022,Native:207,Origin:[Microsoft][ODBC SQL Server Driver][SQL Server Driver][SQL Server]"
В m_strError
: "Недопустимое имя столбца "ColName"
См. также
Класс CException
Диаграмма иерархии
Класс CDatabase
Класс CRecordset
Класс CFieldExchange
CRecordset::Update
CRecordset::D elete
Класс CException