CDBException 類別
表示資料庫類別引發的例外狀況。
語法
class CDBException : public CException
成員
公用資料成員
名稱 | 描述 |
---|---|
CDBException::m_nRetCode | 包含類型為 RETCODE 的 Open Database Connectivity (ODBC) 傳回碼。 |
CDBException::m_strError | 包含字串,描述英數位元詞彙的錯誤。 |
CDBException::m_strStateNativeOrigin | 包含字串,描述 ODBC 所傳回之錯誤碼的錯誤碼。 |
備註
類別包含兩個公用數據成員,可用來判斷例外狀況的原因,或顯示描述例外狀況的簡訊。 CDBException
物件是由資料庫類別的成員函式所建構和擲回。
注意
這個類別是 MFC 的 Open Database Connectivity (ODBC) 類別之一。 如果您改用較新的數據存取物件 (DAO) 類別,請改用 CDaoException 。 所有 DAO 類別名稱都有 「CDao」 作為前置詞。 如需詳細資訊,請參閱概觀:資料庫程序設計一文。
例外狀況是異常執行的情況,涉及程式控制外部的條件,例如數據源或網路 I/O 錯誤。 您可能預期在執行程式正常過程中看到的錯誤通常不會被視為例外狀況。
您可以在 CATCH 表達式的範圍內存取這些物件。 您也可以使用AfxThrowDBException
全域函式,從自己的程式代碼擲回CDBException
物件。
如需一般例外狀況處理或對象的詳細資訊CDBException
,請參閱例外狀況處理(MFC)和例外狀況:資料庫例外狀況一文。
繼承階層架構
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::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::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 類別