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封装
工程中引入以下两文件。
- //ADO.h
- #pragma once
- class ADO
- {
- public:
- ADO(void);
- ~ADO(void);
- void OnInitADOConn(void);
- void CloseRecordset(void);
- void CloseConn(void);
- UINT GetRecordCount(_RecordsetPtr pRecordset);
- public:
- _ConnectionPtr m_pConnection;
- _RecordsetPtr m_pRecordset;
- _RecordsetPtr& OpenRecordset(CString sql);
- };
- //ADO.cpp
- #include "StdAfx.h"
- #include "ADO.h"
- ADO::ADO(void)
- {
- }
- ADO::~ADO(void)
- {
- }
- void ADO::OnInitADOConn(void)
- {
- ::CoInitialize(NULL);
- try
- {
- m_pConnection.CreateInstance("ADODB.Connection");
- _bstr_tstrConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = Media.mdb"; //data source后添数据库文件相对路径或绝对路径均可。
- m_pConnection->Open(strConnect,"","",adModeUnknown);
- }
- catch(_com_errort)
- {
- AfxMessageBox(t.Description());
- }
- }
- _RecordsetPtr& ADO::OpenRecordset(CString sql)
- {
- //TODO: insertreturn statement here
- ASSERT(!sql.IsEmpty());
- try
- {
- m_pRecordset.CreateInstance(__uuidof(Recordset));
- m_pRecordset->Open(_bstr_t(sql), m_pConnection.GetInterfacePtr(),adOpenDynamic, adLockOptimistic, adCmdText);
- }
- catch(_com_errort)
- {
- AfxMessageBox(t.Description());
- }
- returnm_pRecordset;
- }
- void ADO::CloseRecordset(void)
- {
- if(m_pRecordset->GetState() == adStateOpen)
- m_pRecordset->Close();
- }
- void ADO::CloseConn(void)
- {
- m_pConnection->Close();
- ::CoUninitialize();
- }
- UINT ADO::GetRecordCount(_RecordsetPtr pRecordset)
- {
- int count = 0;
- try
- {
- pRecordset->MoveFirst();
- }
- catch(...)
- {
- return 0;
- }
- if(pRecordset->adoEOF)
- return 0;
- while(!pRecordset->adoEOF)
- {
- pRecordset->MoveNext();
- count = count +1;
- }
- pRecordset->MoveFirst();
- return count;
- }
3.使用案例
1.创建连接实例并打开记录集
- ADO m_ado;
- m_ado.OnInitADOConn();
- CString sql ="select * from MediaInfo order by id desc";
- m_ado.m_pRecordset= m_ado.OpenRecordset(sql);
2.读入数据操作view plai
- ADO m_ado;
- m_ado.OnInitADOConn();
- CString sql = "select * from MediaInfo order by id ";
- m_ado.m_pRecordset = m_ado.OpenRecordset(sql);
- while (!m_ado.m_pRecordset->adoEOF)
- {
- m_show.InsertItem(0,"");
- m_show.SetItemText(0,0,(char*)(_bstr_t)m_ado.m_pRecordset->GetCollect("id"));
- m_show.SetItemText(0,1,(char*)(_bstr_t)m_ado.m_pRecordset->GetCollect("mediaName"));
- m_show.SetItemText(0,2,(char*)(_bstr_t)m_ado.m_pRecordset->GetCollect("mediaPath"));
- m_ado.m_pRecordset->MoveNext();
- }
- m_ado.CloseRecordset();
- m_ado.CloseConn();
- m_ado.m_pRecordset->AddNew();
- m_ado.m_pRecordset->PutCollect("mediaName ",(_bstr_t)m_ mediaName);
- m_ado.m_pRecordset->PutCollect("mediaPath ",(_bstr_t)m_ mediaPath);
- m_ado.m_pRecordset->Update();
4.修改数据
- m_ado.m_pRecordset->Move((long)position, vtMissing);
- m_ado.m_pRecordset->PutCollect("id",(_bstr_t)m_id);
- m_ado.m_pRecordset->Move(position, vtMissing);
- m_ado.m_pRecordset->Delete(adAffectCurrent);