MFC 登录界面帐号密码与SQL数据库中查询比较怎么实现啊 做好久老是出错
本帖最后由 zuo_jin 于 2012-12-31 22:41:50 编辑 void CMyDlg::OnOK()
{UpdateData(TRUE);
::CoInitialize(NULL);m_pRecordset.CreateInstance(__uuidof(Recordset));
try
{
m_pConnection.CreateInstance("ADODB.Connection");
_bstr_t strConn="Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Stu_course;Data Source=.;";
m_pConnection->Open(strConn,"","",adModeUnknown);
//if(m_pConnection->State==adStateOpen)
//MessageBox("成功连接数据库!!");
}
catch(_com_error e)
{
::CoUninitialize();
AfxMessageBox(e.ErrorMessage());
return;
}//上面检查连接数据库成功
if(m_LogInType==1)//m_LogInType int类型
{
CString strTmp1,strTmp2;
UpdateData(true);
if(m_Edit1.IsEmpty())
MessageBox("请输入你的学号/工号:");
if(m_Edit2.IsEmpty())
MessageBox("请输入你的密码:");
CString Cselect;
Cselect="select * from password where userid = ";//报password有语法错
Cselect += m_Edit1;
Cselect += " and userkey=";
Cselect += m_Edit2;m_Adodc1.SetRecordSource(Cselect);
m_Adodc1.Refresh();
//m_pRecordset->Open(_variant_t(strSQL),_variant_t((IDispatch*)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
long i=m_pRecordset->RecordCount;
m_pRecordset->Close();
m_pConnection->Close();
if(i==1)
{
//stu_id=strTmp1;
DIALOG1 dlg;
dlg.DoModal();
}
else
{
MessageBox("学号或密码输入错误,请重新输入:","错误提示!");
}
UpdateData(false);
}
else if(m_LogInType==2)
{
UpdateData(true);
CString strTmp1,strTmp2;
_variant_t ra;
GetDlgItemText (IDC_EDIT_NO, strTmp1);
GetDlgItemText (IDC_EDIT_PWD, strTmp2);
if(strTmp1.IsEmpty())
MessageBox("请输入你的学号/工号:");
if(strTmp2.IsEmpty())
MessageBox("请输入你的密码:");
CString strSQL;
strSQL="SELECT * FROM password WHERE userid = ";
strSQL = strSQL+m_Edit1;
strSQL =strSQL+ " and userkey = ";
strSQL =strSQL+ m_Edit2;
//m_pRecordset->Open(_variant_t(strSQL),_variant_t((IDispatch*)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
m_Adodc1.SetRecordSource(strSQL);
m_Adodc1.Refresh();
long i=m_pRecordset->RecordCount; //获取记录条数
m_pRecordset->Close();
m_pConnection->Close();
//m_adodc1.SetRecordSource(strSQL);
//m_adodc1.Refresh();
if(i==1)
{
DIALOG2 dlg;
dlg.DoModal();
}
else
{
MessageBox("工号或密码输入错误,请重新输入:","错误提示!");
}
UpdateData(false);
}
else
{
MessageBox(_T("请选择你帐号的类型"),_T("选择类型用户:"),MB_OK|MB_ICONSTOP);
}
UpdateData(false);}
不知道我这思路对不对 都试过几种方法了。。。 mfc 数据库
------解决方案--------------------
加异常捕获看是什么错误
try
{
//你的ADO代码
}
catch (_com_error& e)
{
CString strMsg;
strMsg.Format(_T("错误描述:%s\n错误消息%s"),
(LPCTSTR)e.Description(),
(LPCTSTR)e.ErrorMessage());
AfxMessageBox(strMsg);
}
[解决办法]
是什么错误,是不是比较不成功,如果是,从数据库取出用户和密码后要去掉前后空格再比较,不然很可能就会比较失败
[解决办法]
可能是调用CreateInstance失败了。
一步一步跟踪下看是哪步出错了。
[解决办法]
本帖最后由 zyq5945 于 2013-01-02 17:27:40 编辑
不是说得很清楚吗?你是不是在触发这个异常之前调用close关闭对象了。
[解决办法]
语句顺序错了
哪能先关闭呢
[解决办法]
看看这里的例子能不能参考一下
http://blog.csdn.net/xianglitian/article/details/5617173