⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adodatabase.cpp

📁 一个ADO数据库变程的通用类
💻 CPP
字号:
//ADODatabase.cpp: Implementation of the CADOConnection class and the CADORecordset class

#include "stdafx.h"
#include "ADOObj.h"
#include "ADODatabase.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//Start up COM when globals are constructed, shut down COM when globals are destructed
struct StartUpCom
{
	StartUpCom()  //构造函数
	{
		CoInitialize(NULL);  //初始化COM环境		
	}
	~StartUpCom() //析构函数
	{
		CoUninitialize();    //释放COM对象
	}
} _global_com_inst;

/********************************************/
/*Implementation of the CADOConnection class*/
/********************************************/
CADOConnection::CADOConnection()
{
	m_pConn = NULL;
	m_sConnString = " ";
}

CADOConnection::~CADOConnection()
{
	if(m_pConn->State ==adStateOpen)
		m_pConn->Close();
	m_pConn = NULL;
}

BOOL CADOConnection::Open(_bstr_t ConnectionString) //打开指定的数据源,并建立连接对象
{
	HRESULT hr;
	hr = m_pConn.CreateInstance("ADODB.Connection");
	if(FAILED(hr))
		return FALSE;
	m_sConnString = ConnectionString;
	m_pConn->CursorLocation = adUseClient;
	hr = m_pConn->Open(m_sConnString, " ", " ", -1);
	if(FAILED(hr))
		return FALSE;
	else
		return TRUE;
}

void CADOConnection::Close() //关闭连接对象,断开连接对象与数据源的联系
{
	if(m_pConn->State == adStateOpen)
	{
		m_pConn->Close();
		m_pConn = NULL;
	}
}

CADORecordset* CADOConnection::Excute(_bstr_t CommandText)
{
	CADORecordset *adoRs = new CADORecordset;
	_variant_t vRowsAffected;
	if(m_pConn->State == adStateOpen)
		adoRs->m_pRs = m_pConn->Execute(CommandText, &vRowsAffected, adCmdText);
	else
		adoRs->m_pRs = NULL;
	return adoRs;
}

void CADOConnection::BeginTrans()  //启动事务处理
{
	if(m_pConn->State == adStateOpen)
		m_pConn->BeginTrans();
}

void CADOConnection::CommitTrans()  //提交事务处理
{
	if(m_pConn->State == adStateOpen)
		m_pConn->CommitTrans();
}

void CADOConnection::RollbackTrans()  //回滚事务处理
{
	if(m_pConn->State == adStateOpen)
		m_pConn->RollbackTrans();
}

_ConnectionPtr CADOConnection::GetConnection()
{
	return m_pConn;
}

/********************************************/
/*Implementation of the CADORecordset class**/
/********************************************/
CADORecordset::CADORecordset()
{
	m_pRs = NULL;
}

CADORecordset::~CADORecordset()
{
	if(m_pRs->State == adStateOpen) 
	{
		m_pRs->Close();   //关闭记录集
		m_pRs = NULL;
	}
}

BOOL CADORecordset::Open(CString sCommandString, CADOConnection *adoConn) //打开一个记录集
{
	_ConnectionPtr pConn = 	adoConn->GetConnection();

	HRESULT hr;
	hr = m_pRs.CreateInstance("ADODB.Recordset");
	if(FAILED(hr))
		return FALSE;
	hr = m_pRs->Open(_bstr_t(sCommandString), pConn.GetInterfacePtr(), adOpenStatic, 
		                                      adLockOptimistic, adCmdText);
	if(FAILED(hr))
		return FALSE;
	return TRUE;
}

void CADORecordset::Close() //关闭已打开的记录集对象
{
	if(m_pRs->State == adStateOpen)
	{
		m_pRs->Close();
		m_pRs = NULL;
	}
}

void CADORecordset::AddNew()
{
	if(m_pRs->State == adStateOpen)
		m_pRs->AddNew();
}

void CADORecordset::Delete()
{
	if(m_pRs->State == adStateOpen)
	{
		m_pRs->Delete(adAffectCurrent);
		MoveNext();
	}
}

void CADORecordset::Update()
{
	if(m_pRs->State == adStateOpen)
		m_pRs->Update();
}

void CADORecordset::UpdateBatch()
{
	if(m_pRs->State == adStateOpen)
		m_pRs->UpdateBatch(adAffectAll);
}

_variant_t CADORecordset::operator()(_variant_t FieldName)
{
	if (m_pRs->State == adStateOpen)
		return m_pRs->GetCollect(FieldName);
	else
		return _variant_t(" ");
}

void CADORecordset::operator()(_variant_t FieldName, _variant_t Val)
{
	if(m_pRs->State == adStateOpen)
		m_pRs->PutCollect(_variant_t(FieldName), _variant_t(Val));

}

long CADORecordset::GetRecordNo()
{
	if(m_pRs->State == adStateOpen)
		return m_pRs->AbsolutePosition;
	else
		return 0L;
}

long CADORecordset::GetRecordCount()
{
	if(m_pRs->State == adStateOpen)
		return m_pRs->RecordCount;
	else
		return 0L;
}

void CADORecordset::MoveFirst()
{
	if(m_pRs->State == adStateOpen)
		m_pRs->MoveFirst();
}

void CADORecordset::MovePrev()
{
	if(m_pRs->State == adStateOpen)
	{
		m_pRs->MovePrevious();
		if(m_pRs->BOF)
			m_pRs->MoveFirst();
	}
}

void CADORecordset::MoveNext()
{
	if(m_pRs->State == adStateOpen)
	{
		m_pRs->MoveNext();
		if(m_pRs->adoEOF) 
			m_pRs->MoveLast();
	}
}

void CADORecordset::MoveLast()
{
	if(m_pRs->State == adStateOpen)
	{
		m_pRs->MoveLast();
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -