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
記事を参照してください。
継承階層
CDBException
必要条件
ヘッダー: afxdb.h
CDBException::m_nRetCode
ODBC アプリケーション プログラミング インターフェイス (API) 関数によって返される RETCODE 型の ODBC エラー コードが含まれます。
解説
この型には、ODBC で定義された SQL プレフィックス付きコードと、データベース クラスによって定義された AFX_SQL プレフィックス付きコードが含まれます。 a の CDBException
場合、このメンバーには次のいずれかの値が含まれます。
AFX_SQL_ERROR_API_CONFORMANCE 呼び出しの
CDatabase::OpenEx
CDatabase::Open
ドライバーが、必要な ODBC API 準拠レベル 1 (SQL_OAC_LEVEL1) に準拠していません。AFX_SQL_ERROR_CONNECT_FAIL データ ソースへの接続に失敗しました。 レコードセット コンストラクターに NULL
CDatabase
ポインターを渡し、その後の失敗に基づいてGetDefaultConnect
接続を作成しようとしました。AFX_SQL_ERROR_DATA_TRUNCATED ストレージを提供したデータよりも多くのデータを要求しました。 提供されるデータ ストレージ
CString
またはデータ型を増やす方法については、「マクロとCByteArray
グローバル」のRFX_TextとRFX_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::Update
Delete
し、複数のレコードを変更しました。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::OpenEx
CDatabase::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 クラス
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示