共用方式為


CDBException 類別

表示資料庫類別引發的例外狀況。

語法

class CDBException : public CException

成員

公用資料成員

名稱 描述
CDBException::m_nRetCode 包含 RETCODE 類型的 Open Database 連線ivity (ODBC) 傳回碼。
CDBException::m_strError 包含字串,描述英數位元詞彙的錯誤。
CDBException::m_strStateNativeOrigin 包含字串,描述 ODBC 所傳回之錯誤碼的錯誤碼。

備註

類別包含兩個公用資料成員,可用來判斷例外狀況的原因,或顯示描述例外狀況的簡訊。 CDBException 物件是由資料庫類別的成員函式所建構和擲回。

注意

這個類別是 MFC 的 Open Database 連線ivity (ODBC) 類別之一。 如果您改用較新的資料存取物件 (DAO) 類別,請改用 CDaoException 。 所有 DAO 類別名稱都有 「CDao」 作為前置詞。 如需詳細資訊,請參閱概觀:資料庫程式設計 一文

例外狀況是異常執行的情況,涉及程式控制外部的條件,例如資料來源或網路 I/O 錯誤。 您可能預期在執行程式正常過程中看到的錯誤通常不會被視為例外狀況。

您可以在 CATCH 運算式的範圍內 存取這些物件。 您也可以使用 AfxThrowDBException 全域函式,從自己的程式碼擲回 CDBException 物件。

如需一般例外狀況處理或物件的詳細資訊 CDBException ,請參閱例外狀況處理(MFC) 例外狀況:資料庫例外狀況 一文 。

繼承階層架構

CObject

CException

CDBException

需求

標頭: afxdb.h

CDBException::m_nRetCode

包含 ODBC 應用程式開發介面 (API) 函式所傳回之 RETCODE 類型的 ODBC 錯誤碼。

備註

此類型包含 ODBC 所定義的 SQL 前置詞程式碼,以及資料庫類別所定義的AFX_SQL前置代碼。 CDBException針對 ,此成員將包含下列其中一個值:

  • AFX_SQL_ERROR_API_CONFORMANCE 或 CDatabase::Open 呼叫的 CDatabase::OpenEx 驅動程式不符合必要的 ODBC API 一致性層級 1 (SQL_OAC_LEVEL1)。

  • 資料來源AFX_SQL_ERROR_CONNECT_FAIL 連線失敗。 您已將 Null CDatabase 指標傳遞至記錄集建構函式,以及後續嘗試根據 GetDefaultConnect 失敗建立連線。

  • AFX_SQL_ERROR_DATA_TRUNCATED您要求的資料超過您提供的儲存體。 如需增加 或 資料類型所提供之資料儲存 CString 區的資訊,請參閱 nMaxLength 「宏與全域」底下的RFX_Text RFX_Binary 引數 。 CByteArray

  • AFX_SQL_ERROR_DYNASET_NOT_SUPPORTED要求動態集的呼叫 CRecordset::Open 失敗。 驅動程式不支援動態集。

  • AFX_SQL_ERROR_EMPTY_COLUMN_LIST您嘗試開啟資料表(或您提供的專案無法識別為程序呼叫或 SELECT 語句),但覆寫中沒有記錄欄位交換 (RFX) 函式呼叫中 DoFieldExchange 識別的資料行。

  • AFX_SQL_ERROR_FIELD_SCHEMA_MISMATCH 覆寫中的 DoFieldExchange RFX 函式類型與記錄集中的資料行資料類型不相容。

  • AFX_SQL_ERROR_ILLEGAL_MODE 您 CRecordset::Update 先前未呼叫 或 CRecordset::Edit 呼叫 CRecordset::AddNew

  • 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::UpdateDelete ,但當作業開始時,便無法再找到記錄。

  • 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::Open 呼叫的 CDatabase::OpenEx 驅動程式不符合所需的 ODBC SQL 一致性層級 「Minimum」 (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,這是以 Null 結束的字串,其中包含 ODBC SQLError 函式 szSqlState 參數中 傳回的五個字元錯誤碼。 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] 不正確資料行名稱 'ColName'」

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 類別