有关登陆验证过程 我用 ADO SQL如何实现登陆验证用户名和密码是否存在和正确 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用输入的用户名和密码作为SQL语句中where的条件然后判断查询到的record数是否为1 1楼方法正解,具体代码可上http://www.vckbase.com找,有相关的连接数据库、查找字段的例子, void CLoginDlg::OnOK() { // TODO: Add extra validation here // 定义登录用户的编号、名称、密码、权限等变量 _variant_t vID, vName, vPass, vRole; // 定义SQL字符串 CString strSQL; m_nLoginCount++; // 登录计数 UpdateData(TRUE); // 更新成员变量 try { CAlarmApp *pApp = (CAlarmApp*)AfxGetApp(); // 获取App _RecordsetPtr pRecordset = pApp->m_pRecordset; // 获取App下成员变量m_pRecordset if (pRecordset != NULL) { strSQL.Format("select id,name,password,role from UserInfo where id='%s'", m_strUserID); if (pRecordset->State) // 关闭记录集 pRecordset->Close(); pRecordset->Open((_variant_t)(LPCTSTR)strSQL, _variant_t((IDispatch*)pApp->m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); if (pRecordset->BOF && pRecordset->adoEOF) // 查询记录为空 { if (pRecordset != NULL && pRecordset->State) { //pRecordset->Close(); //pRecordset = NULL; //提示无此用户 MessageBox("无此用户,请与系统管理员联系", AppTitleName, MB_ICONINFORMATION | MB_OK); m_strPassword.Empty(); UpdateData(FALSE); ((CEdit*)GetDlgItem(IDC_EDIT_USERID))->SetFocus(); } } else // 查询记录不为空 { vID = pRecordset->GetCollect("ID"); // 取得用户编号 vName = pRecordset->GetCollect("Name"); // 取得用户名称 vPass = pRecordset->GetCollect("Password"); // 取得密码 vRole = pRecordset->GetCollect("Role"); // 取得权限 if ( ((vPass.vt == VT_NULL || vPass.vt == VT_EMPTY) && m_strPassword.IsEmpty()) || (vPass.vt != VT_NULL && (LPCTSTR)(_bstr_t)vPass==m_strPassword ) ) { m_nLoginCount = 0; // 重置登录计数 CDialog::OnOK(); // 登录成功 } else { MessageBox("用户名或口令错误!请重新输入", AppTitleName, MB_ICONEXCLAMATION | MB_OK); m_strPassword.Empty(); UpdateData(FALSE); ((CEdit*)GetDlgItem(IDC_EDIT_USERID))->SetFocus(); } } } if (m_nLoginCount==3) { MessageBox(_T("三次登录失败,请确定您是合法用户"), AppTitleName, MB_ICONSTOP | MB_OK); CDialog::OnCancel(); } } catch(_com_error e) // 捕捉异常 { CString errormessage; errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage()); AfxMessageBox(errormessage); // 显示错误信息 CDialog::OnCancel(); }} 5楼Elysium的方法不怎么懂,感觉挺麻烦的还有if ( ((vPass.vt == VT_NULL ¦ ¦ vPass.vt == VT_EMPTY) && m_strPassword.IsEmpty()) ¦ ¦ (vPass.vt != VT_NULL && (LPCTSTR)(_bstr_t)vPass==m_strPassword ) ) 这一句不知道做什么的 就是想知道 怎么确认输入的用户名和密码与SQL表中的一样 谁来帮帮忙 VC2005中怎样将自定义的控件添加到工具箱中? 请教一个关于 static text的问题 一个字符编码的问题 getBoundingClientRect 取坐标问题 用ado连接access,如何将一个access文件的表全部复制到另一个access文件中? windows消息机制的基础问题 ●●●●●●●●●●●关于串口的~~~~~!!!!!!!!!●●●●●●●●●●● APIENTRY 与 WINAPI有什么区别? 求助vc++问题! 请问在程序中要用二进制形式表示一个数怎么写 关于MFC对话框中图片控件的问题 vc 2005宏
然后判断查询到的record数是否为1
具体代码可上http://www.vckbase.com找,
有相关的连接数据库、查找字段的例子,
{
// TODO: Add extra validation here
// 定义登录用户的编号、名称、密码、权限等变量
_variant_t vID, vName, vPass, vRole; // 定义SQL字符串
CString strSQL; m_nLoginCount++; // 登录计数 UpdateData(TRUE); // 更新成员变量
try
{
CAlarmApp *pApp = (CAlarmApp*)AfxGetApp(); // 获取App
_RecordsetPtr pRecordset = pApp->m_pRecordset; // 获取App下成员变量m_pRecordset
if (pRecordset != NULL)
{
strSQL.Format("select id,name,password,role from UserInfo where id='%s'", m_strUserID); if (pRecordset->State) // 关闭记录集
pRecordset->Close(); pRecordset->Open((_variant_t)(LPCTSTR)strSQL, _variant_t((IDispatch*)pApp->m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); if (pRecordset->BOF && pRecordset->adoEOF) // 查询记录为空
{
if (pRecordset != NULL && pRecordset->State)
{
//pRecordset->Close();
//pRecordset = NULL; //提示无此用户
MessageBox("无此用户,请与系统管理员联系", AppTitleName, MB_ICONINFORMATION | MB_OK);
m_strPassword.Empty();
UpdateData(FALSE);
((CEdit*)GetDlgItem(IDC_EDIT_USERID))->SetFocus();
}
}
else // 查询记录不为空
{
vID = pRecordset->GetCollect("ID"); // 取得用户编号
vName = pRecordset->GetCollect("Name"); // 取得用户名称
vPass = pRecordset->GetCollect("Password"); // 取得密码
vRole = pRecordset->GetCollect("Role"); // 取得权限
if ( ((vPass.vt == VT_NULL || vPass.vt == VT_EMPTY) && m_strPassword.IsEmpty())
|| (vPass.vt != VT_NULL && (LPCTSTR)(_bstr_t)vPass==m_strPassword ) )
{
m_nLoginCount = 0; // 重置登录计数
CDialog::OnOK(); // 登录成功
}
else
{
MessageBox("用户名或口令错误!请重新输入", AppTitleName, MB_ICONEXCLAMATION | MB_OK);
m_strPassword.Empty();
UpdateData(FALSE);
((CEdit*)GetDlgItem(IDC_EDIT_USERID))->SetFocus();
}
}
} if (m_nLoginCount==3)
{
MessageBox(_T("三次登录失败,请确定您是合法用户"), AppTitleName, MB_ICONSTOP | MB_OK);
CDialog::OnCancel();
}
}
catch(_com_error e) // 捕捉异常
{
CString errormessage;
errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage); // 显示错误信息
CDialog::OnCancel();
}
}
感觉挺麻烦的
还有
if ( ((vPass.vt == VT_NULL ¦ ¦ vPass.vt == VT_EMPTY) && m_strPassword.IsEmpty())
¦ ¦ (vPass.vt != VT_NULL && (LPCTSTR)(_bstr_t)vPass==m_strPassword ) )
这一句不知道做什么的