ado连接数据库,登录,看看输入的密码等不等与数据库password中的password
代码如下:       int tag=0;
//CDialog::OnOK();
UpdateData(TRUE);
    try
{
    CString sql;
sql.Format(_T("select * from password")); _RecordsetPtr p_Recordset;
p_Recordset.CreateInstance(__uuidof(Recordset));
p_Recordset->Open((_bstr_t)sql,p_Connection1.GetInterfacePtr(),adOpenDynamic,
adLockOptimistic,adCmdUnknown);
while(!p_Recordset->adoEOF)
{ if (m_passsword==(_bstr_t)p_Recordset->GetCollect((_T("password")))))//不知道这里写的对不?
{
MessageBox("成功登录!");
    tag=1;
break;
}

p_Recordset->MoveNext();
}
if (tag==1)
{
dlg1.DoModal();//显示相应的学生数据库增加,删除信息对话框
}
else
MessageBox("请输入正确的用户名和密码!");

}
catch(_com_error e)
{
AfxMessageBox(_T("Failed!"));
}
大家有什么,好的办法,?
我还是不太了解p_Recordset->GetCollect的返回值是啥类型的?
我这个编译连接都没问题,但是就是说("请输入正确的用户名和密码!");
我估计就是if (m_passsword==(_bstr_t)p_Recordset->GetCollect((_T("password")))))这个判断不对

解决方案 »

  1.   

    p_Recordset->GetCollect的返回值是_variant_t类型;_variant_t var;
    CString str;
    var =p_Recordset->GetCollect("password");
    if(var.vt != VT_NULL)
    str = (LPCSTR)_bstr_t(var);
      

  2.   

    if(var.vt != VT_NULL)//请问这句,中,vt_null是啥意思??
      

  3.   

    不用那么麻烦吧,你直接修改你的 select语句,然后判断打开的记录集中的记录个数是否>1就可以验证了
      

  4.   


    vt_null指的是某个记录的这个字段值为null,一般用于做判断的
      

  5.   


    CString sql;
    sql.Format(_T("select * from password where name='%s' and password='%s'" ),m_name,m_passsword); _RecordsetPtr p_Recordset;
    p_Recordset.CreateInstance(__uuidof(Recordset));
    p_Recordset->Open((_bstr_t)sql,p_Connection1.GetInterfacePtr(),adOpenDynamic,
    adLockOptimistic,adCmdUnknown);
    if (p_Recordset->GetRecordCount()==1)
    {
    MessageBox("成功登录!");
        tag=1;
    //break;
    }
    if (tag==1)
    {
    dlg1.DoModal();
    }
    else
    MessageBox("请输入正确的用户名和密码!");

    }
    这么搞?没反应,直接跳到下一句去了,,