在登录界面,需要根据用户输入的用户名和密码,检验其合法性。因此,使用VC的ADO技术来编写函数ValidateUser,实现此功能。
首先,为了在VC++6.0中使用ADO,必须 StdAfx.h头文件中包含以下代码:
#import"C:/program files/common files/system/ado/msado15.dll" no_namespace/
rename("EOF", "EndOfFile")/ //修改名字,防止重命名
rename("LockTypeEnum", "newLockTypeEnum")/
rename("DatabaseTypeEnum", "newDataTypeEnum")/
rename("FieldAttributeEnum", "newFileAttributeEnum")/
rename("EditModeEnum", "newEditModeEnum")/
rename("RecordStatusEnum", "newRecordStatusEnum")/
rename("ParameterDirectionEnum", "newParameterDirectionEnum")
下面,实现数据库的连接,并在user_Info表中查询与userName和userPassword相匹配的记录,如果记录集不为空,则返回真值true,否则返回假值false。我编写的程序所用的数据库名为“WareHouse.mdb”。
BOOL ValidateUser(CString userName, CString userPassword)
{
// 初始化COM,为创建ADO连接等操作做准备
AfxOleInit();
// 打开数据库连接
_ConnectionPtr ADOConn;
ADOConn.CreateInstance(__uuidof(Connection));
try
{
ADOConn->Open("Provider = Microsoft.Jet.OLEDB.4.0;Data Source = WareHouse.mdb", "", "", adModeUnknown);
}
catch(_com_error e)
{
AfxMessageBox("数据库连接失败!");
return FALSE;
}
//查询记录
_variant_t strSQL;
strSQL= "select * from user_Info where user_ID = '" + userName + "' and user_PWD = '" + userPassword +"'";
_RecordsetPtr ADOSet;
ADOSet.CreateInstance(__uuidof(Recordset));
try
{
ADOSet->Open(strSQL, ADOConn.GetInterfacePtr(), adOpenStatic, adLockOptimistic,adCmdUnknown);
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
return FALSE;
}
if (ADOSet->GetRecordCount() != 0)
{
return true;
}
else
return false;
}
此外,需要在主程序退出时断开数据库连接,因此添加以下代码(我的工程名为Material_MIS):
int CMaterial_MISApp::ExitInstance()
{
if (adStateOpen == ADOConn->State)
ADOConn->Close();
ADOConn.Release();
if(adStateOpen == m_pADOset->State)
m_pADOset->Close();
m_pADOset.Release();
return CWinApp::ExitInstance();
}
其中所用到的两个变量在CMaterial_MISApp.h中定义:
public:
_RecordsetPtr m_pADOset;
private:
_ConnectionPtr ADOConn;