一、引入ADO库文件
在stdafx.h文件末尾添加以下语句:
#import "c:/program files/common files/system/ado/msado15.dll" no_namespace rename("EOF", "adoEOF")
注意上面语句不要放在开头,否则编译产生下面错误提示:
fatal error C1189: #error : WINDOWS.H already included. MFC apps must not #include <windows.h> c:/program files/microsoft visual studio 8/vc/atlmfc/include/afxv_w32.h 16
二、初始化OLE/COM库环境
在应用程序主类的InitInstance成员函数里加入
if(!AfxOleInit())
{
AfxMessageBox("OLE初始化出错!");
return FALSE;
}
三、使用ADO接口
ADO库包含三个基本接口:_ConnectionPtr接口、_CommandPtr接口和_RecordsetPtr接口。
_ConnectionPtr接口返回一个记录集或一个空指针,使用它创建一个数据连接,然后使用其它对象执行数据输入输出操作。
_CommandPtr接口返回一个记录集,它提供了一种简单的方法来执行返回记录集的存储过程和SQL语句。
_RecordsetPtr是一个记录集对象,与以上两种对象相比,它对记录集提供了更多的控制功能,如记录锁定,游标控制等。
1、使用_ConnectionPtr接口
_ConnectionPtr MyDb;
MyDb.CreateInstance(__uuidof(Connection));
MyDb->Open("Provider=SQLOLEDB;SERVER=127.0.0.1;DATABASE=Northwind;UID=sa;PWD=","","",-1);
2、使用_RecordsetPtr接口
//用_RecordsetPtr接口获得记录集
_RecordsetPtr MySet;
MySet.CreateInstance(__uuidof(Recordset));
MySet->Open("SELECT * FROM Employees", MyDb.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
//访问数据
_variant_t Holder;
try
{
while(!MySet->adoEOF)
{
Holder = MySet->GetCollect("FirstName");
if(Holder.vt!=VT_NULL)
m_List.InsertItem(0,(char*)(_bstr_t)Holder); //m_List是ListBox控件
MySet->MoveNext();
}
}
catch(_com_error * e)
{
CString Error = e->ErrorMessage();
AfxMessageBox(e->ErrorMessage());
}
catch(...)
{
MessageBox("ADO发生错误!");
}
3、使用_CommandPtr接口获取数据
_CommandPtr pCommand;
_RecordsetPtr MySet1;
pCommand.CreateInstance(__uuidof(Command));
pCommand->ActiveConnection=MyDb;
pCommand->CommandText="select * from Employees";
pCommand->CommandType=adCmdText;
pCommand->Parameters->Refresh();
MySet=pCommand->Execute(NULL,NULL,adCmdUnknown);
_variant_t TheValue = MySet->GetCollect("FirstName");
CString sValue=(char*)_bstr_t(TheValue);