首    页 界面/窗口 网络/通讯 数据库 组件开发 图像/多媒体 NET/Web 其它技术 源码下载 资料下载 软件共享 软件外包 曲艺杂谈
栏目导航:  首    页  |  数据库  |  ADO   


VC下ADO的数据库访问方式举例


原作者:不详    源出处:CSDN    发布者:施昌权    发布类型:转载    发布日期:2008-10-24


先简单说说ADO(总结)。
在VC中使用ADO的开发步骤:
1,引入ADO库文件
  在工程的stdafx.h里用#import引入ADO库文件。
  #import "C:\Program Files\Common Files\System\ado\msado15.dll"  no_namespace  rename("BOF","adoBOF") rename("EOF","adoEOF")
2, 初始化COM环境
  ::CoInitialize(NULL); //初始化OLE/COM库环境
  ::CoUninitialize();   //关闭OLE/COM库环境,释放资源
  AfxOleInit();//初始化OLE/COM库环境(MFC自带的)
3,使用ADO库的三个基本接口
  ADO库包含三个基本接口:_ConnectionPtr接口、_RecordsetPtr接口和_CommandPtr接口。
其分别对应Connection对象(完成应用程序对数据源的访问连接)、Recordset对象(将查询的结果以记录集的方式存储)和Command对象(对已连接的数据源进行命令操作)。
定义对象并创建对象实例:
方法一:
_ConnectionPtr m_pConnection;
_RecordsetPtr m_pRecordset;
_CommandPtr m_pCommand;
m_pConnection.CreateInstance(__uuidof(Connection));
m_pRecordset.CreateInstance(__uuidof(Recordset));
m_pCommand.CreateInstance(__uuidof(Command));
方法二:
_ConnectionPtr m_pConnection("ADODB.Connection");
_RecordsetPtr m_pRecordset("ADODB.Recordset");
_CommandPtr m_pCommand("ADODN.Command");
方法三:
_ConnectionPtr m_pConnection;
_RecordsetPtr m_pRecordset;
_CommandPtr m_pCommand;
m_pConnection.CreateInstance("ADODB.Connection");
m_pRecordset.CreateInstance("ADODB.Recordset");
m_pCommand.CreateInstance("ADODN.Command");
这三种方法都是一样的,关键看你喜好。

分别举例简单说明一下:
Connection对象:
  _ConnectionPtr m_pConnection;
  m_pConnection.CreateInstance(__uuidof(Connection));
  try{ 
       // 打开本地Access库ChatLog.mdb
      m_pConnection->Open    ("Provider=Microsoft.Jet.OLEDB.4.0;DataSource=ChatLog.mdb","","",adModeUnknown);
   //SQL Server连接方法
   _bstr_t strConnect = "Provider=SQLOLEDB; Server=billgates;Database=HrMan; uid=sa; pwd=sa;";
   m_pConnection->Open(strConnect,"","",adModeUnknown);
  }
  catch(_com_error e){
   AfxMessageBox(e.Description());
  }
Recordset对象:
  _RecordsetPtr m_pRecordset;
  m_pRecordset.CreateInstance(__uuidof(Recordset));
  CString sql;
  sql.Format("SELECT DISTINCT name FROM table1");
  try{
   m_pRecordset->Open(sql.GetBuffer(sql.GetLength()),
                        _variant_t((IDispatch *)m_pConnection,true),
    adOpenDynamic,
    adLockOptimistic,
    adCmdText);
  }
  catch(_com_error *e){
   AfxMessageBox(e->ErrorMessage());
  }
  CString strName;
  while (!m_pRecordset->adoEOF) {
   strName.Format("%s",(char*)(_bstr_t)m_pRecordset->Fields->GetItem(_variant_t("Name"))->Value);
   m_listbox.AddString(strName);
   m_pRecordset->MoveNext();
  }
Command对象:
  _CommandPtr m_pCommand;
     HRESULT hr = m_pCommand.CreateInstance(__uuidof(Command));
  if(FAILED(hr))
  {   
   AfxMessageBox("创建Command对象实例失败!");
  }
  CString  strP_mailid;
  _ParameterPtr param;
     param=m_pCommand->CreateParameter("p_mailid",adVarChar,adParamOutput,strP_mailid.GetLength()+1,_variant_t(strP_mailid));
  m_pCommand->Parameters->Append(param);

 m_pCommand->ActiveConnection = m_pConnection;
  m_pCommand->CommandType = adCmdStoredProc; 
  m_pCommand->CommandText = _bstr_t("P_MAIL_SEND");
  try{
   cmd->Execute(NULL,NULL,adCmdStoredProc);
  }
  catch (...) {
   AfxMessageBox("调用存储过程P_MAIL_SEND有错!");
  }
  try{
   strP_mailid = (char*)(_bstr_t)m_pCommand->Parameters->GetItem(_variant_t("p_mailid"))->GetValue();
  }catch (...) {
   strP_mailid = "";
  }
  m_pCommand.Detach();

          

关于我们 版权声明 广告服务 联系我们 友情链接 加入收藏
站长:施昌权    Email:scq2099yt@163.com    MSN:scq2099yt@live.cn    QQ:14046300    本站QQ群:67202409
Copyright © 2008     卓为VC(www.joyvc.cn)    All Rights Reserved    建议分辨率 1024×768
本站由施昌权制作维护
京ICP备09012297号