第一次接触ADO数据库,自己的一点经验,在这里总结一下,以免后面忘记了,再重新来看。也许文字中有错误,请大家能给予指正。本文中使用的数据是access2000.
.h头文件中定义一下变量:
_ConnectionPtr m_pConn;
_RecordsetPtr m_pRecSet;
_CommandPtr m_pComd;
.cpp源文件中实现数据库的连接
//连接数据库
bool MyDlg::ConnDb(void)
{
CString sPath;
CString Serror;
CString strSql;
//获取当前路径,并放在sPath中。
GetModuleFileName(NULL,sPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);
//释放上面函数中分配的buffer内存。
sPath.ReleaseBuffer();
int nPos;
//定位最后一个\\所在的位置
nPos=sPath.ReverseFind('\\');
//取出最后一个\\的左侧部分
sPath=sPath.Left(nPos);
//将数据库名字连接到sPath中。
sPath+="\\MyDateBase2000.mdb";
CFileFind finder;
//查看此数据库文件是否存在
if(!finder.FindFile(sPath)){
MessageBox("数据库文件不存在!",NULL,0);
return FALSE;
}
CString connStr;
HRESULT hRet; //用来接收接口返回的代码部分,如果接口返回成功,则这个值为0,如果不
//成功,则包含返回的错误状态信息
try
{
//Connection代表一个windows应用程序和一个SQL服务数据库引擎实例的连接
//__uuidof获取Connection的唯一标识符
//CreateInstance创建一个对象实例
hRet=m_pConn.CreateInstance(__uuidof(Connection));
if(!SUCCEEDED(hRet)) return FALSE;
//CursorLocation 是ADODC对象的游标库的位置,默认值是adUseClient
m_pConn->CursorLocation = adUseClient;
connStr.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s",sPath);
//Open调用次函数初始化一个新建的CDaoDatabase对象,这个对象代表一个现有的数
//据库资源。
hRet=m_pConn->Open((_bstr_t)connStr,"","",adModeUnknown);
if(!SUCCEEDED(hRet)) return FALSE;
//m_pComd命令指针
hRet=m_pComd.CreateInstance(__uuidof(Command));
if(!SUCCEEDED(hRet)) return FALSE;
m_pComd->ActiveConnection = m_pConn;
//m_pRecSet记录集指针
//通过使用 Recordset 属性可以使用 ADO ADODB.Recordset 对象的方法、属性和事
//件。
hRet=m_pRecSet.CreateInstance(__uuidof(Recordset));
if(!SUCCEEDED(hRet)) return FALSE;
}
catch (_com_error e)
{
Serror.Format("数据库连接失败:%s",e.ErrorMessage());
AfxMessageBox(Serror);
}
}
//关闭数据库
void CLevelTestDialog::CloseDatabase()
{
m_pRecSet = NULL; //释放记录集
if(m_pConn->State)
{
m_pConn->Close(); //关闭连接
}
m_pConn= NULL; //释放连接指针
}