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封装

工程中引入以下两文件。

view plain

  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.  };  


view plain

  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.创建连接实例并打开记录集 

view plain

  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.向数据库中添加数据

view pla

  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.修改数据

view plain

  1. m_ado.m_pRecordset->Move((long)position, vtMissing);  

  2. m_ado.m_pRecordset->PutCollect("id",(_bstr_t)m_id);  

5.删除一条记录

view plain

  1. m_ado.m_pRecordset->Move(position, vtMissing);  

  2. m_ado.m_pRecordset->Delete(adAffectCurrent);  


你可能感兴趣的:(MFC ADO使用)