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" があります。 詳細については、「 Overview: データベース プログラミング」を参照してください。
例外は、データ ソースやネットワーク I/O エラーなど、プログラムの制御外の条件を伴う異常な実行の場合です。 通常、プログラムの実行過程で発生する可能性のあるエラーは、例外とは見なされません。
これらのオブジェクトには、 CATCH 式のスコープ内でアクセスできます。 AfxThrowDBException
グローバル関数を使用して、独自のコードからCDBException
オブジェクトをスローすることもできます。
一般的な例外処理の詳細、または CDBException
オブジェクトの詳細については、「Exception Handling (MFC) 」および「 Exceptions: Database Exceptions」を参照してください。
継承階層
CDBException
要件
Header: afxdb.h
CDBException::m_nRetCode
ODBC アプリケーション プログラミング インターフェイス (API) 関数によって返される RETCODE 型の ODBC エラー コードが含まれます。
解説
この型には、ODBC で定義された SQL プレフィックス付きコードと、データベース クラスによって定義された AFX_SQL プレフィックス付きコードが含まれます。 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_DYNASET_NOT_SUPPORTED ダイナセットを要求する
CRecordset::Open
の呼び出しに失敗しました。 ダイナセットはドライバーではサポートされていません。AFX_SQL_ERROR_EMPTY_COLUMN_LIST プロシージャ呼び出しまたは SELECT ステートメントとして指定できなかったテーブルを開こうとしましたが、
DoFieldExchange
オーバーライドのレコード フィールド交換 (RFX) 関数呼び出しで識別された列がありません。AFX_SQL_ERROR_FIELD_SCHEMA_MISMATCH
DoFieldExchange
オーバーライドの RFX 関数の型は、レコードセット内の列データ型と互換性がありません。AFX_SQL_ERROR_ILLEGAL_MODE 以前に
CRecordset::AddNew
またはCRecordset::Edit
を呼び出さずにCRecordset::Update
を呼び出しました。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_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関数が失敗しました。 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 値は、付録 A ODBC エラー コード ODBC プログラマー リファレンスに記載されています。 例: "S0022"。SQLError
関数の pfNativeError パラメーターで返される、データ ソースに固有のネイティブ エラー コード。 例: 207。SQLError
関数の szErrorMsg パラメーターで返されるエラー メッセージ テキスト。 このメッセージは、複数の角かっこで囲まれた名前で構成されます。 エラーがソースからユーザーに渡されると、各 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]"
m_strError
: "列名 'ColName' が無効です"
関連項目
CException クラス
階層図
CDatabase クラス
CRecordset クラス
CFieldExchange クラス
CRecordset::Update
CRecordset::D elete
CException クラス