次の方法で共有


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」を参照してください。

継承階層

CObject

CException

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_TextRFX_BinarynMaxLength引数を参照してください。

  • 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 関数SQLErrorszSqlState パラメーターで返される 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 クラス