Share via


CDBException クラス

データベース クラスから発生する例外状態を表現します。

構文

class CDBException : public CException

メンバー

パブリック データ メンバー

名前 説明
CDBException::m_nRetCode RETCODE 型の Open Database Connectivity (ODBC) リターン コードが含まれています。
CDBException::m_strError エラーを英数字で表す文字列を含みます。
CDBException::m_strStateNativeOrigin ODBC によって返されるエラー コードの観点からエラーを記述する文字列が含まれています。

解説

このクラスには、例外の原因を特定したり、例外を説明するテキスト メッセージを表示したりするために使用できる 2 つのパブリック データ メンバーが含まれています。 CDBException オブジェクトは、データベース クラスのメンバー関数によって構築およびスローされます。

Note

このクラスは、MFC の Open Database Connectivity (ODBC) クラスの 1 つです。 代わりに新しいデータ アクセス オブジェクト (DAO) クラスを使用する場合は、代わりに CDaoException を使用します。 すべての DAO クラス名には、プレフィックスとして "CDao" があります。 詳細については、「概要: データベース プログラミング」を参照してください。

例外は、データ ソースやネットワーク I/O エラーなど、プログラムの制御外の条件を伴う異常な実行の場合です。 通常、プログラムの実行過程で発生する可能性のあるエラーは、例外とは見なされません。

これらのオブジェクトには、CATCH 式のスコープ内でアクセスできます。 グローバル関数を使用して、独自のコードからオブジェクトをAfxThrowDBExceptionスローCDBExceptionすることもできます。

例外処理全般の詳細、またはオブジェクトの詳細については、例外処理 (MFC)例外: データベース例外に関するCDBException記事を参照してください。

継承階層

CObject

Cexception

CDBException

必要条件

ヘッダー: afxdb.h

CDBException::m_nRetCode

ODBC アプリケーション プログラミング インターフェイス (API) 関数によって返される RETCODE 型の ODBC エラー コードが含まれます。

解説

この型には、ODBC で定義された SQL プレフィックス付きコードと、データベース クラスによって定義された AFX_SQL プレフィックス付きコードが含まれます。 a の CDBException場合、このメンバーには次のいずれかの値が含まれます。

  • AFX_SQL_ERROR_API_CONFORMANCE 呼び出しのCDatabase::OpenExCDatabase::Openドライバーが、必要な ODBC API 準拠レベル 1 (SQL_OAC_LEVEL1) に準拠していません。

  • AFX_SQL_ERROR_CONNECT_FAIL データ ソースへの接続に失敗しました。 レコードセット コンストラクターに NULL CDatabase ポインターを渡し、その後の失敗に基づいて GetDefaultConnect 接続を作成しようとしました。

  • AFX_SQL_ERROR_DATA_TRUNCATED ストレージを提供したデータよりも多くのデータを要求しました。 提供されるデータ ストレージCStringまたはデータ型を増やす方法については、「マクロとCByteArrayグローバル」のRFX_TextRFX_Binaryの引数を参照してくださいnMaxLength

  • AFX_SQL_ERROR_DYNAStandard EditionT_NOT_SUPPORTED ダイナセットを要求するCRecordset::Open呼び出しに失敗しました。 ダイナセットはドライバーではサポートされていません。

  • AFX_SQL_ERROR_EMPTY_COLUMN_LIST テーブルを開こうとしましたが (または、指定したテーブルをプロシージャ呼び出しまたは Standard Edition LECT ステートメントとして識別できませんでした)、オーバーライドのレコード フィールド交換 (RFX) 関数呼び出しでDoFieldExchange識別された列がありません。

  • 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::UpdateDeleteし、複数のレコードを変更しました。

  • AFX_SQL_ERROR_NO_CURRENT_RECORD 以前に削除したレコードを編集または削除しようとしました。 削除後、新しい現在のレコードまでスクロールする必要があります。

  • AFX_SQL_ERROR_NO_POSITIONED_UPDATES 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 レベル 2 準拠の ODBC ドライバーが必要なため、ダイナセットの要求を満たできませんでした。

  • AFX_SQL_ERROR_RECORDStandard EditionT_FORWARD_ONLY データ ソースが後方スクロールをサポートしていないため、スクロールできませんでした。

  • AFX_SQL_ERROR_SNAPSHOT_NOT_SUPPORTED スナップショットを要求するCRecordset::Open呼び出しが失敗しました。 スナップショットはドライバーではサポートされていません。 (これは、ODBC カーソル ライブラリ ODBCCURS.DLL が存在しない場合にのみ発生します)。

  • AFX_SQL_ERROR_SQL_CONFORMANCE 呼び出しのCDatabase::OpenExCDatabase::Openドライバーが、必要な ODBC SQL 準拠レベルの "最小" (SQL_OSC_MINIMUM) に準拠していません。

  • AFX_SQL_ERROR_SQL_NO_TOTAL ODBC ドライバーは、データ値の合計サイズを CLongBinary 指定できませんでした。 グローバル メモリ ブロックを事前に割り当てられなかったため、操作が失敗した可能性があります。

  • AFX_SQL_ERROR_RECORDStandard EditionT_READONLY 読み取り専用レコードセットを更新しようとしたか、データ ソースが読み取り専用です。 レコードセットまたは関連付けられているオブジェクトに対して更新操作を CDatabase 実行することはできません。

  • SQL_ERROR関数が失敗しました。 ODBC 関数 SQLError によって返されるエラー メッセージは、データ メンバーに m_strError 格納されます。

  • SQL_INVALID_HANDLE環境ハンドル、接続ハンドル、またはステートメント ハンドルが無効なため、関数が失敗しました。 これは、プログラミング エラーを示します。 ODBC 関数 SQLErrorから追加情報を取得できません。

SQL プレフィックス付きコードは ODBC によって定義されます。 AFX プレフィックス付きコードは、AFXDB で定義されます。H。MFC\INCLUDE にあります。

CDBException::m_strError

例外の原因となったエラーを説明する文字列が含まれています。

解説

この文字列は、エラーを英数字で表します。 詳細と例については、次を参照してください m_strStateNativeOrigin

CDBException::m_strStateNativeOrigin

例外の原因となったエラーを説明する文字列が含まれています。

解説

文字列の形式は "State:%s,Native:%ld,Origin:%s" です。この形式コードは、次のように記述する値に置き換えられます。

  • SQLSTATE。ODBC 関数SQLErrorの szSqlState パラメーターで返される 5 文字のエラー コードを含む null で終わる文字列。 SQLSTATE 値は、「ODBC プログラマー リファレンス」の付録 A の ODBC エラー コード記載されています。 例: "S0022"。

  • 関数の pfNativeError パラメーターで返される、データ ソースに固有のSQLErrorネイティブ エラー コード。 例: 207。

  • 関数の szErrorMsg パラメーターで返されるエラー メッセージ テキストSQLError。 このメッセージは、複数の角かっこで囲まれた名前で構成されます。 エラーがソースからユーザーに渡されると、各 ODBC コンポーネント (データ ソース、ドライバー、ドライバー マネージャー) に独自の名前が追加されます。 この情報は、エラーの原因を特定するのに役立ちます。 例: [Microsoft][ODBC SQL Server Driver][SQL Server]

フレームワークはエラー文字列を解釈し、そのコンポーネントを m_strStateNativeOrigin配置します。複数のエラーの情報が含まれている場合 m_strStateNativeOrigin 、エラーは改行で区切られます。 フレームワークは、英数字のエラー テキストを入力 m_strErrorします。

この文字列を構成するために使用されるコードの詳細については、ODBC プログラマ リファレンスの SQLError 関数を 参照してください

ODBC から: "State:S0022,Native:207,Origin:[Microsoft][ODBC SQL Server Driver][SQL Server] Invalid column name 'ColName'"

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

In m_strError: "Invalid column name 'ColName'"

関連項目

CException クラス
階層図
CDatabase クラス
CRecordset クラス
CFieldExchange クラス
CRecordset::Update
CRecordset::D elete
CException クラス