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

先简单说说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();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值