MFC 提供 DAO(Access)、ODBC(通用)、OLE DB(ADO)三種數據庫訪問方式。現代項目推薦使用 ADO(_ConnectionPtr, _RecordsetPtr),輕量且跨數據庫。
#import "msado15.dll" no_namespace rename("EOF", "adoEOF")
CoInitialize(NULL);
_ConnectionPtr pConn;
pConn.CreateInstance(__uuidof(Connection));
pConn->Open("Provider=SQLOLEDB;Server=.;Database=TestDB;Uid=sa;Pwd=123;", "", "", adConnectUnspecified);
_RecordsetPtr pRs;
pRs.CreateInstance(__uuidof(Recordset));
CString sql = _T("SELECT name FROM [table] WHERE id = ?");
_CommandPtr pCmd;
pCmd.CreateInstance(__uuidof(Command));
pCmd->ActiveConnection = pConn;
pCmd->CommandText = _bstr_t(sql);
pCmd->CommandType = adCmdText;
// 綁定參數
_ParameterPtr pParam = pCmd->CreateParameter(_T("@id"), adInteger, adParamInput, 4, nID);
pCmd->Parameters->Append(pParam);
pRs = pCmd->Execute(NULL, NULL, adCmdText);
if (!pRs->adoEOF) {
_variant_t vName = pRs->GetCollect("name");
CString strName = (LPCTSTR)(_bstr_t)vName;
// 顯示到編輯框
GetDlgItem(IDC_EDIT_NAME)->SetWindowText(strName);
}
pRs->Close();
pConn->Close();
CoUninitialize();
? + CreateParameter)防 SQL 注入。_com_error 捕獲 ADO 錯誤。Close()、Release() 執行,建議用智能指針(_ConnectionPtr 等)自動管理。