参考了孙鑫老师的《VC++从入门到精通》,向孙老师致敬!
ADO的三个核心对象
Connection对象
   Connection对象表示了到数据库的连接,它管理应用程序和数据库之间的通信。 Recordset和Command对象都有一个ActiveConnection属性,该属性用来引用Connection对象。
Command对象
   Command对象被用来处理重复执行的查询,或处理需要检查在存储过程调用中的输出或返回参数的值的查询。
Recordset对象
   Recordset对象被用来获取数据。 Recordset对象存放查询的结果,这些结果由数据的行(称为记录)和列(称为字段)组成。每一列都存放在Recordset的Fields集合中的一个Field对象中。
在VC中利用ADO访问数据库
    1.新建一个基于对话框的工程,名为ADO。
    2.在对话框中放一ListBox和一个Button控件。
    3.在使用时须导入MSADO15.dll,方法是在StdAfx.h中#import "D:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","rsEOF")
    至少于将EOF改名为rsEOF,是为了避免与文件中的EOF重名。然后编译程序,将产生的debug目录下的两个文件MSADO15.tlh和MSADO15.tli加到工程中,其目的只是方便我们查看而已。并不是编译需要它。
    ADO也是COM组件,须初始化COM库方法是CoInitialize(NULL);使用完后须CoUninitialize();
    代码如下:
 void CAdoDlg::OnBtnQuery() 
{ 
 int i,j;
 char  mdbPath[256]; //mdb文件路径
 char connstr[512];  //连接字符串
 char connstr2[512]; //连接字符串2
 memset(mdbPath,0,256);
 memset(connstr,0,512);
 memset(connstr2,0,512);
 strcpy(connstr,"driver={Microsoft Access Driver (*.mdb)};dbq=");
 if(!::GetCurrentDirectory(256,mdbPath))
 {
  AfxMessageBox("获取数据库路径失败!");
  return;
 }
 if(mdbPath[strlen(mdbPath)-1]!='\\')
  mdbPath[strlen(mdbPath)]='\\';
 strcat(mdbPath,"data.mdb");
 strcat(connstr,mdbPath);
 for(i=0,j=0;i<strlen(connstr);i++,j++)
 {
  if(connstr[i]!='\\')
   connstr2[j]=connstr[i];
  else
  {
   connstr2[j]='\\';
   connstr2[++j]='\\';
  }
 }
 CoInitialize(NULL);
 _ConnectionPtr pConn(__uuidof(Connection));//产生connection智能指针
 _RecordsetPtr pRst(__uuidof(Recordset)); //产生recordset智能指针
 pConn->Open(connstr2, "","",adModeUnknown); //打开数据库
 pRst->Open("select * from user",_variant_t((IDispatch*)pConn),adOpenStatic,adLockOptimistic,adCmdText);
 while(!pRst->rsEOF)//将查询到的数据加到列表框
 {
  ((CListBox*)GetDlgItem(IDC_LIST1))->AddString(
   (_bstr_t)pRst->GetCollect("name"));
  pRst->MoveNext();
 }
 //插入一条记录
 pRst->AddNew();
 pRst->PutCollect("name",_variant_t("sun"));
 pRst->PutCollect("age",_variant_t((long)21));
 pRst->Update();
 pRst->Close();
 pConn->Close();
 pRst.Release();
 pConn.Release();
 CoUninitialize();
}
本博客于即日起(2009.2.26)停止更新,

