void CDlgUserlogin::OnBnClickedOk()
{
UpdateData(true);
m_cName.Trim();
sql = "SELECT * FROM Operator WHERE Name = '" + m_cName + "'";
if(!m_adoacct.GetRecordset(sql,pRs))
{
AfxMessageBox("该用户名不存在!!!");
m_adoacct.CloseRecordset(pRs);
return;
} m_adoacct.CloseRecordset(pRs);
OnOK();
}比如说用户名m_cName在数据库中是小写的,但我输入大写登录时也可以在数据库中找到记录,为什么??是不是在数据库中就不分大小写??谢谢!

解决方案 »

  1.   

    是的,数据库不区分大小小,你要想区分大小写可以这样
    SELECT Name FROM Operator WHERE Name = '" + m_cName + "'";
    这样你可能能查出多个结果,你再在内存里比较
      

  2.   

    同意Poseidon2(hxy)!
    区分大小写是在数据库中实现!
      

  3.   

    严重同意,数据库的确是不区分大小写的,不知道你用的是什么数据库,如果是ms sql server 的话,可以在查询语句后面加“collate chinese_prc_CS_as”即sql = "SELECT * FROM Operator WHERE Name = '" + m_cName + "' collate chinese_prc_CS_as";
      

  4.   

    CString strSql = "SELECT * FROM Operator WHERE Name = '" + m_cName + "'";
    HRESULT hr;
    AdoNS::_RecordsetPtr pRecordset;
    _variant_t vUsername,vBirthday,vID,vOld;
    pRecordset.CreateInstance("ADODB.Recordset");
    pRecordset->Open((_bstr_t)strSQL,_variant_t((IDispatch*)m_pConnection,true),AdoNS::adOpenStatic,AdoNS::adLockOptimistic,AdoNS::adCmdText);
    bool bExist=false;//用来标识用户是否存在
    //下面记录集里查到的是有大写也有小写的,如果你要区分大小写可能不只一个
    while(!pRecordset->adoEOF)
    {
         CString strName=pRecordset->GetCollect(0).bstrVal;
         if(m_cName==strName)
        {
           bExist=true;
           break;
        }
    }
    pRecordset->Close();
    if(!bExist)
    {
        MessageBox("用户不存在!");
    }
      

  5.   

    写错了,第一句的SQL语句改成
    CString strSQL="SELECT name FROM Operator WHERE Name = '" + m_cName + "'";
      

  6.   

    sql server可以强制区分大小写,你可以写个存储过程来实现.
    access数据库就不知道了,呵呵