我用 ADO  SQL如何实现登陆验证用户名和密码是否存在和正确

解决方案 »

  1.   

    用输入的用户名和密码作为SQL语句中where的条件
    然后判断查询到的record数是否为1
      

  2.   

    1楼方法正解,
    具体代码可上http://www.vckbase.com找,
    有相关的连接数据库、查找字段的例子,
      

  3.   

    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();
    }
    }
      

  4.   

    5楼Elysium的方法不怎么懂,
    感觉挺麻烦的
    还有
    if ( ((vPass.vt == VT_NULL ¦ ¦ vPass.vt == VT_EMPTY) && m_strPassword.IsEmpty()) 
    ¦ ¦ (vPass.vt != VT_NULL && (LPCTSTR)(_bstr_t)vPass==m_strPassword ) ) 
    这一句不知道做什么的
      

  5.   

    就是想知道 怎么确认输入的用户名和密码与SQL表中的一样 谁来帮帮忙