ADODB

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;
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值