MFC通过ADO连接Access数据库

ADO简介

ADO(ActiveX Data Objects, ActiveX数据对象)是Microsoft提出的应用程序接口(API)用以实现访问数据库的功能。ADO向C++编程人员提供基本OLE DB接口的访问权限,学习和使用起来非常简单。

ADO连接与关闭

ADO需使用msado15.dll动态链接库,先在Example.h头文件中使用#import宏指令来生成.tlh标头,并为CExample对象添加数据库连接对象成员变量。

#import "C:\Program Files\Common Files\System\ado\msado15.dll" rename("EOF","adoEOF"), rename("BOF","adoBOF")

class CExample
{
  //......
private:
  //与数据库的连接对象
  ADODB::_ConnectionPtr m_connPtr;
  //......
};

在Example.cpp文件中需要使用ADODB命名空间,并使用Microsoft.Jet.OLEDB.4.0数据提供程序连接数据库,使用完成后不要忘记关闭数据库并释放相关资源。

using namespace ADODB;

//......

bool CExample::InitDatabase()
{
  //初始化OLE/COM库环境
  ::CoInitialize(NULL);
  //生成连接字符串
  _bstr_t connStr;
  connStr = "Provider = Microsoft.Jet.OLEDB.4.0;"
            "Data Source = D:\\Example\\Example.mdb;";
  try
  {
    //实例化连接对象并打开数据库
    m_connPtr.CreateInstance(__uuidof(Connection));
    m_connPtr->Open(connStr, "", "", adModeUnknown);
    return true;
  }
  catch(_com_error& e)
  {
    return false;
  }
}

void CManagement::ReleaseDatabase()
{
  try
  {
    //关闭数据库连接
    m_connPtr->Close();
    //释放OLE/COM库环境
    ::CoUninitialize();
  }
  catch(_com_error& e)
  {
  }
}

//......

ADO增删改查

直接使用编辑好的SQL语句完成“增删改”的工作,在此只示例插入数据的操作,其他同理。

//使用SQL命令插入数据
CString sqlCommand;            //SQL指令字符串
_variant_t vRecordsAffected;   //影响的记录个数
try
{
  sqlCommand.Format("INSERT INTO [Example] ([field1], [field2], [field3]) "
                    "VALUES ('%s', %d, %.6f)",
                    m_strValue1, m_nValue2, m_fValue3);
  m_connPtr->Execute((_bstr_t)sqlCommand, &vRecordsAffected, adCmdText);
}
catch(_com_error& e)
{
  //......
}

“查”操作需要使用记录集对象保存查询结果,在此示例查询指定数据表中最近添加的一个自动编号主键的值。

_RecordsetPtr recordsetPtr;
recordsetPtr.CreateInstance(__uuidof(Recordset));
recordsetPtr->Open("SELECT @@Identity AS FieldName From [Example]",
                   m_connPtr.GetInterfacePtr(),
                   adOpenDynamic, adLockOptimistic, adCmdText);
_variant_t exampleID = recordsetPtr->GetCollect("FieldName");
recordsetPtr->Close();
m_lExampleID = exampleID.lVal;

说明

本文只是罗列了作者目前使用到的ADO用法,更多参数设置及使用方式请参考MSDN官方文档。

转载请注明出处。

发表评论