ADO(ActiveX DataObjects)是微软公司推出的新一代数据库访问规范,使用简介强大,已经基本取代ODBC和DAO.
ADO对象:
1,连接对象 Connection 用于连接数据源,以及处理一些命令和事物。在使用ADO访问数据库之前,必须先创建一个Connection对象,通过它打开与数据库的连接
2,命令对象 Command 用于执行传递给数据源的命令。
3,记录集对象 Recordset 可操作来自数据源的数据,通过该对象可对几乎所有的数据进行操作。所有的Recordset都可以通过使用记录(行)和字段(列)进行构造
4,参数对象 Parameter代表参数和机遇参数化的Command的参数信息。
封装的ado操作头文件:
#pragma once
#import"c:\program files\common files\system\ado\msado15.dll"\
no_namespacerename("EOF","adoEOF")rename("BOF","adoBOF")
class ADOConn
{
public:
ADOConn(void);
~ADOConn(void);
_ConnectionPtr m_pConnection;//添加指向Connection的指针
_RecordsetPtr m_pRecordSet; ;//添加指向Recordset的指针
void OnnitADOConn(void);//初始化数据库连接
void ExitConnect(void); //退出数据库连接
_RecordsetPtr &GetRecordSet(_bstr_tbstrSQL);//获取数据源的记录集
BOOL ExecuteSQL(_bstr_t bstrSQL);//执行传入的数据库SQL命令
};
封装的ado操作源文件:
#include"StdAfx.h"
#include"ADOConn.h"
ADOConn::ADOConn(void)
{
}
ADOConn::~ADOConn(void)
{
}
voidADOConn::OnnitADOConn(void)
{
::CoInitialize(NULL);//初始化OLE/COM环境
try
{
m_pConnection.CreateInstance("ADODB.Connection");
Cstring connectionstr="Driver={SQLServer};Server=(local);Database=PersonalInfoManageSystem;UID=sa;PWD=123456";//设置连接字符串
m_pConnection->Open((_bstr_t)connectionstr,"","",adModeUnknown);
}
catch (_com_error e)//捕捉异常
{
AfxMessageBox(e.Description());//显示错误信息
}
}
voidADOConn::ExitConnect(void)
{
m_pConnection->Close();
::CoUninitialize();
}
BOOLADOConn::ExecuteSQL(_bstr_t bstrSQL)
{
_variant_t RecordsAffected;
try
{
if (m_pConnection==NULL)
{
OnnitADOConn();
}
m_pConnection->Execute(bstrSQL,NULL,adCmdText);
return true;
}
catch (_com_error e)
{
e.Description();
return false;
}
}
_RecordsetPtr& ADOConn::GetRecordSet(_bstr_t bstrSQL)
{
try
{
if (m_pConnection==NULL)
{
OnnitADOConn();
}
m_pRecordSet.CreateInstance(_uuidof(Recordset));
m_pRecordSet->Open((_bstr_t)bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
}
catch (_com_error e)
{
e.Description();
}
return m_pRecordSet;
}
运用该头文件和源文件从数据源中取数据,并显示在界面的listview中:
ADOConn m_ado;//定义ado连接对象
int i=400;
m_ado.OnnitADOConn();//初始化
CString sql="select * from Dataorder by Frec desc " ;//设置sql命令
_RecordsetPtr m_precord;
m_precord=m_ado.GetRecordSet(_bstr_t(sql));//获取数据源查询的记录集
while (m_ado.m_pRecordSet->adoEOF==0)//==0表示还有数据
{
CString s;
s.Format("%d",i--);
m_data.InsertItem(0,"");
m_data.SetItemText(0,0,s);
m_data.SetItemText(0,1,(char*)(_bstr_t)m_precord->GetCollect("Frec"));
m_data.SetItemText(0,2,(char*)(_bstr_t)m_precord->GetCollect("Result"));
m_precord->MoveNext();//获取下一条记录
}
m_ado.ExitConnect();//退出连接