ConnectionPtr、_RecordsetPtr和_CommandPtr 打开和关闭
//ADOConn.h
#pragma once
class ADOConn
{
public:
_ConnectionPtr m_pConnection;
_RecordsetPtr m_pRecordset;
public:
ADOConn(void);
virtual ~ADOConn(void);
_RecordsetPtr GetRecordset(LPCTSTR strSQL);
void ExecuteSQL(LPCTSTR strSQL);
void ExitConnect();
};
//ADOConn.cpp
#include "StdAfx.h"
#include "ADOConn.h"
#include "iostream"
using namespace std;
ADOConn::ADOConn(void)
{
}
ADOConn::~ADOConn(void)
{
}
_RecordsetPtr ADOConn::GetRecordset(LPCTSTR strSQL)
{
try
{
if (m_pConnection==NULL)
{
::CoInitialize(NULL);
m_pConnection.CreateInstance(TEXT("ADODB.Connection"));
HRESULT hr = m_pConnection->Open(TEXT("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=MagicalWorld.accdb"),"", "", adModeUnknown);
if (!SUCCEEDED(hr))
{
AfxMessageBox(TEXT("连接未成功"));
}
}
m_pRecordset.CreateInstance(_uuidof(Recordset));
m_pRecordset->Open(strSQL, m_pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText);
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
return NULL;
}
catch(...)
{
AfxMessageBox(TEXT("未知错误"));
return NULL;
}
return m_pRecordset;
}
void ADOConn::ExecuteSQL(LPCTSTR strSQL)
{
GetRecordset(strSQL);
}
void ADOConn::ExitConnect()
{
//关闭记录集和连接
if(m_pRecordset !=NULL)
m_pRecordset->Close();
m_pConnection->Close();
//释放环境
::CoUninitialize();//关闭ole/com库,释放资源
}
// invoke
LPCTSTR strSQL = TEXT("select * from TBAccount");
ADOConn test;
_RecordsetPtr pRecordset = test.GetRecordset(strSQL);
try
{
while(!pRecordset->adoEOF)
{
int accountID = pRecordset->GetCollect("AccountID");
int accountName = pRecordset->GetCollect("AccountName");
int password = pRecordset->GetCollect("Password");
int propertyListID = pRecordset->GetCollect("PropertyListID");
int map = pRecordset->GetCollect("Map");
pRecordset->MoveNext();//移动到下一条记录
}
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
return;
}
catch(...)
{
AfxMessageBox(TEXT("未知错误"));
return;
}