数据库的连接后 登陆的安全验证问题

o_758303596 2011-04-26 09:50:57
我写了一个登陆对话框,可是在得到数据库中的用户名和密码上面出现了问题

登陆验证的代码:
CString c_user,c_password;
m_user.GetWindowText(c_user);
m_password.GetWindowText(c_password);
if(c_user.IsEmpty()||c_password.IsEmpty())
{
MessageBox(_T("用户名或密码为空"),_T("用户登录"));
return ;
}
CString sql;
sql.Format( _T("select * from denglu where 姓名='%s'and \
密码='%s'") ,c_user,c_password);
m_pRs->Open((_variant_t)sql,m_pCon.GetInterfacePtr(),adOpenKeyset,
adLockOptimistic,adCmdText); //打开记录集
if(m_pRs->RecordCount>0) //用户名和密码正确时
{
Flag=true; //设置登录状态
user = m_pRs->GetCollect("name").bstrVal; //获得用户名和密码
password = m_pRs->GetCollect("password").bstrVal;

EndDialog(0);
}
else //用户名和密码不正确
{
user = ""; //将用户名和密码置空
password = "";
MessageBox(_T("用户名或密码错误"),_T("登录信息"),64); //弹出错误信息
return;
}
...全文
215 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
King_hhuang 2011-04-28
  • 打赏
  • 举报
回复
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")

加到Stdafx.h文件中
o_758303596 2011-04-28
  • 打赏
  • 举报
回复
adoEOF 什么参数啊?
King_hhuang 2011-04-28
  • 打赏
  • 举报
回复
你程序开始的时候有没有初始化COM
::CoInitialize(NULL) 或者 AfxOleInit()
有没有初始化m_pCon
m_pCon.CreateInstance(__uuidof(Connection)
King_hhuang 2011-04-28
  • 打赏
  • 举报
回复

try
{
m_pRecordset->Open(_variant_t (strSql),
m_pConnection.GetInterfacePtr(), //// 也可以用_variant_t((IDispatch *)m_pConnection,true),
adOpenDynamic,
adLockOptimistic,
adCmdText) ;
while(!m_pRecordset->adoEOF)
{
……
m_pRecordset->MoveNext();
nCount++;
}

}
catch(_com_error err)
{
CString errMsg;
errMsg.Format("查询记录失败:%s,%s",err.ErrorMessage(),err.Description()););
AfxMessageBox(errMsg);
}


照着上面的代码试试
o_758303596 2011-04-28
  • 打赏
  • 举报
回复
初始化了
King_hhuang 2011-04-27
  • 打赏
  • 举报
回复
错误信息是什么?
另外把你的查询语句放到查询分析器里面运行一下看看,是不是你的sql语句有错误
o_758303596 2011-04-27
  • 打赏
  • 举报
回复
同样的执行完
m_pRs->Open((_variant_t)sql,m_pCon.GetInterfacePtr(),adOpenKeyset,
adLockOptimistic,adCmdText); //打开记录集


就直接跳到catch部分,出现同样的错误
o_758303596 2011-04-27
  • 打赏
  • 举报
回复
还是不行啊
King_hhuang 2011-04-27
  • 打赏
  • 举报
回复
try
{
CString sql;

sql.Format( _T("select * from denglu where 姓名='%s'and \
密码='%s'") ,c_user,c_password);


m_pRs->Open((_variant_t)sql,m_pCon.GetInterfacePtr(),adOpenKeyset,
adLockOptimistic,adCmdText); //打开记录集


if(m_pRs->RecordCount>0) //用户名和密码正确时
{
Flag=true; //设置登录
user = (LPCSTR)(_bstr_t)m_pRs->GetCollect("姓名"); //获得用户名和密码
password = (LPCSTR)(_bstr_t)m_pRs->GetCollect("密码");

EndDialog(0);
}
}
catch(_com_error e)
{
if(m_pRs->RecordCount<0) //用户名和密码不正确
{
user = ""; //将用户名和密码置空
password = "";
MessageBox(_T(e.Description()),_T("登录信息"),64); //弹出错误信息
return;
}
}
}
King_hhuang 2011-04-27
  • 打赏
  • 举报
回复
CString sql;
这个地方要先给sql赋值
m_pRs->Open((_variant_t)sql,m_pCon.GetInterfacePtr(),adOpenKeyset,
adLockOptimistic,adCmdText); //打开记录集
o_758303596 2011-04-27
  • 打赏
  • 举报
回复
try
{
CString sql;
m_pRs->Open((_variant_t)sql,m_pCon.GetInterfacePtr(),adOpenKeyset,
adLockOptimistic,adCmdText); //打开记录集



上面执行完后直接跳到了catch部分,执行完catch部分的if之后就出错,if内的语句没有执行



sql.Format( _T("select * from denglu where 姓名='%s'and \
密码='%s'") ,c_user,c_password);

if(m_pRs->RecordCount>0) //用户名和密码正确时
{
Flag=true; //设置登录
user = m_pRs->GetCollect("姓名").bstrVal; //获得用户名和密码
password = m_pRs->GetCollect("密码").bstrVal;

EndDialog(0);
}
}
catch(_com_error)
{
if(m_pRs->RecordCount<0) //用户名和密码不正确
{
user = ""; //将用户名和密码置空
password = "";
MessageBox(_T("用户名或密码错误"),_T("登录信息"),64); //弹出错误信息
return;
}
}
}
o_758303596 2011-04-27
  • 打赏
  • 举报
回复
SQL语句改了一下
sql.Format( _T("select * from denglu where 姓名='%s'and 密码='%s' ") ,c_user,c_password);

语句在查询分析器中能执行
但还是原来的错误
o_758303596 2011-04-27
  • 打赏
  • 举报
回复
好像是
m_pRs->Open((_variant_t)sql,m_pCon.GetInterfacePtr(),adOpenKeyset,
adLockOptimistic,adCmdText);
这个地方有问题
zxhx 2011-04-27
  • 打赏
  • 举报
回复
sql server安装好了会有一个management studio,打开->连接->选择数据库,点新建查询,就进入查询分析器了。。。
o_758303596 2011-04-27
  • 打赏
  • 举报
回复
另外,查询分析器怎么用的啊?
o_758303596 2011-04-27
  • 打赏
  • 举报
回复
不好意思啊,下午上课去了。


错误信息

图书借阅管理.exe 中的 0x75e89617 处有未经处理的异常: Microsoft C++ 异常: 内存位置 0x0033e2c0 处的 _com_error。
King_hhuang 2011-04-26
  • 打赏
  • 举报
回复
把数据库操作那部分加上try catch
另外断点执行一下,看看在哪里出错,出错的原因是什么
o_758303596 2011-04-26
  • 打赏
  • 举报
回复
还是错误的,什么原因?
King_hhuang 2011-04-26
  • 打赏
  • 举报
回复
那你这个就应该是:
user = m_pRs->GetCollect("姓名").bstrVal; //获得用户名和密码
password = m_pRs->GetCollect("密码").bstrVal;
o_758303596 2011-04-26
  • 打赏
  • 举报
回复
连接的是SQL2005数据库
加载更多回复(2)

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧