MFC ADO使用

MFC ADO使用

1.导入ADO链接库

#import "C:/Program Files/Common Files/System/ado/msado15.dll"no_namespace rename("EOF", "adoEOF")rename("BOF", "adoBOF") //两行写一行,写在stdafx.h文件末尾 。C为系统盘。

 

2.ADO封装

工程中引入以下两文件。

  1. //ADO.h  
  2. #pragma once  
  3.   
  4. class ADO  
  5. {  
  6.  public:  
  7.      ADO(void);  
  8.     ~ADO(void);  
  9.     void OnInitADOConn(void);  
  10.     void CloseRecordset(void);  
  11.     void CloseConn(void);  
  12.     UINT GetRecordCount(_RecordsetPtr pRecordset);  
  13.  public:  
  14.     _ConnectionPtr m_pConnection;  
  15.     _RecordsetPtr m_pRecordset;  
  16.     _RecordsetPtr& OpenRecordset(CString sql);  
  17.  };  

  1. //ADO.cpp  
  2. #include "StdAfx.h"  
  3. #include "ADO.h"  
  4. ADO::ADO(void)  
  5. {  
  6. }  
  7. ADO::~ADO(void)  
  8. {  
  9. }  
  10. void ADO::OnInitADOConn(void)  
  11. {  
  12.    
  13.      ::CoInitialize(NULL);  
  14.      try  
  15.      {  
  16.         m_pConnection.CreateInstance("ADODB.Connection");  
  17.         _bstr_tstrConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = Media.mdb";      //data source后添数据库文件相对路径或绝对路径均可。  
  18.             m_pConnection->Open(strConnect,"","",adModeUnknown);  
  19.      }  
  20.    
  21.      catch(_com_errort)  
  22.      {  
  23.         AfxMessageBox(t.Description());  
  24.      }  
  25. }  
  26.    
  27.    
  28. _RecordsetPtr& ADO::OpenRecordset(CString sql)  
  29. {  
  30.      //TODO: insertreturn statement here  
  31.      ASSERT(!sql.IsEmpty());  
  32.      try  
  33.      {  
  34.          m_pRecordset.CreateInstance(__uuidof(Recordset));  
  35.          m_pRecordset->Open(_bstr_t(sql), m_pConnection.GetInterfacePtr(),adOpenDynamic, adLockOptimistic, adCmdText);  
  36.      }  
  37.      catch(_com_errort)  
  38.      {  
  39.          AfxMessageBox(t.Description());  
  40.      }  
  41.      returnm_pRecordset;  
  42. }  
  43. void ADO::CloseRecordset(void)  
  44. {  
  45.     if(m_pRecordset->GetState() == adStateOpen)  
  46.         m_pRecordset->Close();  
  47. }  
  48. void ADO::CloseConn(void)  
  49. {  
  50.      m_pConnection->Close();  
  51.      ::CoUninitialize();  
  52. }  
  53. UINT ADO::GetRecordCount(_RecordsetPtr pRecordset)  
  54. {  
  55.      int count = 0;  
  56.      try  
  57.      {  
  58.         pRecordset->MoveFirst();  
  59.      }  
  60.      catch(...)  
  61.      {  
  62.         return 0;  
  63.      }  
  64.        
  65.      if(pRecordset->adoEOF)  
  66.         return 0;  
  67.      while(!pRecordset->adoEOF)   
  68.      {  
  69.         pRecordset->MoveNext();  
  70.         count = count +1;  
  71.      }  
  72.      pRecordset->MoveFirst();  
  73.      return count;  
  74. }  

3.使用案例

1.创建连接实例并打开记录集 

  1. ADO m_ado;  
  2. m_ado.OnInitADOConn();  
  3. CString sql ="select * from MediaInfo order by id desc";  
  4. m_ado.m_pRecordset= m_ado.OpenRecordset(sql);  

 2.读入数据操作view plai

  1. ADO m_ado;  
  2. m_ado.OnInitADOConn();  
  3. CString sql = "select * from MediaInfo  order by id ";  
  4. m_ado.m_pRecordset = m_ado.OpenRecordset(sql);  
  5. while (!m_ado.m_pRecordset->adoEOF)  
  6. {  
  7.     m_show.InsertItem(0,"");  
  8.     m_show.SetItemText(0,0,(char*)(_bstr_t)m_ado.m_pRecordset->GetCollect("id"));  
  9.     m_show.SetItemText(0,1,(char*)(_bstr_t)m_ado.m_pRecordset->GetCollect("mediaName"));  
  10.     m_show.SetItemText(0,2,(char*)(_bstr_t)m_ado.m_pRecordset->GetCollect("mediaPath"));  
  11.     m_ado.m_pRecordset->MoveNext();  
  12. }  
  13. m_ado.CloseRecordset();  
  14. m_ado.CloseConn();  
  15.    
3.向数据库中添加数据

  1. m_ado.m_pRecordset->AddNew();  
  2. m_ado.m_pRecordset->PutCollect("mediaName ",(_bstr_t)m_ mediaName);  
  3. m_ado.m_pRecordset->PutCollect("mediaPath ",(_bstr_t)m_ mediaPath);  
  4. m_ado.m_pRecordset->Update();  

4.修改数据

  1. m_ado.m_pRecordset->Move((long)position, vtMissing);  
  2. m_ado.m_pRecordset->PutCollect("id",(_bstr_t)m_id);  
5.删除一条记录

  1. m_ado.m_pRecordset->Move(position, vtMissing);  
  2. m_ado.m_pRecordset->Delete(adAffectCurrent);  
原文地址:https://www.cnblogs.com/seebro/p/2476535.html