在VC中使用ADO实现Access数据库的连接、查询及断开

在登录界面,需要根据用户输入的用户名和密码,检验其合法性。因此,使用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;

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值