MFC 對話框登錄界面,用戶名/密碼存於 SQL Server 表 accounts(acc_user, acc_passwd),需驗證輸入是否匹配。
// 構建參數化查詢,防注入
CString sql = _T("SELECT acc_user, acc_passwd FROM accounts WHERE acc_user = ? AND acc_passwd = ?");
_CommandPtr cmd = NULL;
cmd.CreateInstance(__uuidof(Command));
cmd->ActiveConnection = m_adodc_logIn.GetConnectionString(); // 或直接用 Connection
cmd->CommandText = _bstr_t(sql);
cmd->CommandType = adCmdText;
// 追加參數
cmd->Parameters->Append(cmd->CreateParameter(_T("@user"), adVarChar, adParamInput, 50, m_edit_userName));
cmd->Parameters->Append(cmd->CreateParameter(_T("@pwd"), adVarChar, adParamInput, 50, m_edit_passWord));
_RecordsetPtr rs = cmd->Execute(NULL, NULL, adCmdText);
// 判斷是否查到記錄
if (!rs->adoEOF) {
MessageBox(_T("登錄成功!"));
} else {
MessageBox(_T("登錄失敗!用戶名或密碼錯誤"));
}
rs->Close();
adoEOF:Recordset 為空表示無匹配行,即登錄失敗。Close() Recordset 與 Connection。Provider=SQLOLEDB;Data Source=...;Initial Catalog=...;User ID=...;Password=...。msado15.dll 已註冊,專案引用 Microsoft ActiveX Data Objects 2.x Library。採用參數化 ADO 查詢並正確判斷 Recordset 狀態,即可穩健實現 MFC 登錄驗證。