需求:VC++ 使用 ODBC 插入記錄前,判斷某字段 (如 ID) 在資料庫中不重複。
ALTER TABLE YourTable ADD CONSTRAINT UQ_YourID UNIQUE (ID);PRIMARY KEY (ID)。
try {
CString sql = _T("INSERT INTO YourTable (ID, Col1, Col2) VALUES (?, ?, ?)");
// 使用參數化命令 (CRecordset 或 CDatabase ExecuteSQL)
// ...
pRecordset->AddNew();
pRecordset->SetFieldValue(_T("ID"), idVal);
// ...
pRecordset->Update(); // 觸發資料庫約束檢查
} catch (CDBException* e) {
if (e->m_nRetCode == AFX_SQL_ERROR_DUPLICATE_KEY) { // 或檢查具體 SQLState 23000
AfxMessageBox(_T("ID 已存在,不能重複插入"));
} else {
AfxMessageBox(_T("數據庫錯誤: ") + e->m_strError);
}
e->Delete();
return FALSE;
}
ODBC 錯誤代碼映射:
SQLState 23000 (Integrity Constraint Violation) → 重複鍵。
在 CDBException 中可通過 m_strError 解析或 m_nRetCode 判斷。
**結論:建立唯一約束,直接插入捕獲異常,簡潔、高效、正確。**