Поделиться через


Класс 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) и исключениях: исключения базы данных.

Иерархия наследования

CObject

CException

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 сбой функции из-за недопустимого дескриптора среды, дескриптора соединения или дескриптора инструкций. Это означает ошибку программирования. Дополнительные сведения не доступны из функции SQLErrorODBC.

Коды с префиксом SQL определяются ODBC. Коды с префиксом AFX определяются в AFXDB. H, найденный в MFC\INCLUDE.

CDBException::m_strError

Содержит строку, описывающую ошибку, которая вызвала исключение.

Замечания

Строка описывает ошибку в буквенно-цифровых терминах. Дополнительные сведения и пример см. в статье m_strStateNativeOrigin.

CDBException::m_strStateNativeOrigin

Содержит строку, описывающую ошибку, которая вызвала исключение.

Замечания

Строка имеет форму "State:%s,Native:%ld,Origin:%s", где коды формата, в порядке, заменяются значениями, описывающими:

  • SQLSTATE, строка, завершающаяся значением NULL, содержащая пятизначный код ошибки, возвращаемый в параметре szSqlState функции SQLErrorODBC. Значения 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