1.Stdafx.h添加如下
// 加入ADO支持库
#import "c:/program files/common files/system/ado/msado15.dll" /
no_namespace / //说明ADO对象不使用命名空间
rename ("EOF", "adoEOF") //说明将ADO中结束标志EOF改为adoEOF,以避免和其它库中命名相冲突。
2.CoInitialize(NULL);//初始化com
CoUnInitialize(); //关闭com
MFC中的AfxOleInit(); //自动初始化和关闭com
3.建立ADO类
#include "StdAfx.h"
#include "ADO.h"
CADO::CADO(void)
{
}
CADO::~CADO(void)
{
}
//打开数据库
bool CADO::OnInitADOConn(void)
{
HRESULT hr;
try
{
AfxOleInit();
hr = m_pConnection.CreateInstance(__uuidof(Connection));
if (SUCCEEDED(hr))
{
hr = m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\db1.mdb;","","",adModeUnknown);
}
}
catch(_com_error e)
{
CString errorMsg;
errorMsg.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errorMsg);
}
return false;
}
// 打开数据集
_RecordsetPtr& CADO::OpenRecordset(_Connection* t)
{
//ASSERT(!sql.IsEmpty());
try
{
m_pRecordset.CreateInstance(__uuidof(Recordset));
if (m_pRecordset == NULL)
{
AfxMessageBox("RecordSet 对象创建失败! 请确认是否初始化了COM环境.");
}
//打开记录集
m_pRecordset->Open("SELECT * FROM student",//查询student表
t,//获取连接库的IDispatch指针
adOpenDynamic,
adLockOptimistic,
adCmdText
);
}
catch(_com_error e)
{
CString errorMsg;
errorMsg.Format("连接数据库失败\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errorMsg);
//显示错误信息
}
return m_pRecordset;
}
// 退出
void CADO::ExitConnection(void)
{
if (m_pRecordset->GetState() == adStateOpen) //关闭是0 打开是1
{
m_pRecordset->Close();
m_pRecordset = NULL;
}
if(m_pConnection->State)//关闭是0 打开是1
{
m_pConnection->Close();
m_pConnection = NULL;
}
}
_RecordsetPtr& CADO::GetRecordset(void)
{
//TODO: insert return statement here
return m_pRecordset;
}
4.
BOOL Cado数据库App::InitInstance()
{
m_ado.OnInitADOConn();
m_ado.OpenRecordset(m_ado.m_pConnection.GetInterfacePtr());
return FALSE;
}