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

📄 adodb.cpp

📁 个人财务管理系统,很实用的一个源码,很有参考价值,下载
💻 CPP
字号:
#include "stdafx.h"
#include "ADODB.h"


CAdoDB::CAdoDB()
{
	//调用CoInitialize初始化COM环境
	::CoInitialize(NULL);
}

CAdoDB::~CAdoDB()
{
	//释放COM对象
	::CoUninitialize();	
}

BOOL CAdoDB::IsOpen()
{
	try
	{
		return (m_pConn != NULL && (m_pConn->State & adStateOpen));
	}
	catch (_com_error e)//异常处理 
	{ 
		AfxMessageBox(e.ErrorMessage()); 
	} 
	return FALSE;
}

_RecordsetPtr CAdoDB::Execute(LPCTSTR lpszSQL, long lOptions)//adCmdText
{
	_variant_t RecordsAffected; 
	try
	{
		return m_pConn->Execute(_bstr_t(lpszSQL),&RecordsAffected,adCmdText);
	}
	catch (_com_error e)//异常处理 
	{ 
		AfxMessageBox(e.ErrorMessage()); 
	} 
	return FALSE;
}

BOOL CAdoDB::Open(LPCTSTR lpszConnect, long lOptions)
{
	//创建Connection 对象
	m_pConn.CreateInstance("ADODB.Connection");
	//初始化Recordset指针
	m_pRs.CreateInstance(_uuidof(Recordset)); 
	
	m_strConn = lpszConnect;
	if (m_strConn.IsEmpty())
	{
		return FALSE;
	}
	if (IsOpen()) Close();
	
	try
	{
		// 连接数据库
		return (m_pConn->Open(_bstr_t(m_strConn), "", "", lOptions) == S_OK);
	}
	catch (_com_error e)//异常处理 
	{ 
		AfxMessageBox(e.ErrorMessage()); 
	} 
	return FALSE;
}

void CAdoDB::Close()
{
	try
	{
		if (m_pConn != NULL && IsOpen()) 
		{
			m_pConn->Close();
		}
	}
	catch (_com_error e)//异常处理 
	{ 
		AfxMessageBox(e.ErrorMessage()); 
	} 
}

void CAdoDB::ExecuteQueryValue(LPCTSTR lpszSQL,CString& value)
{
	try
	{
		//打开记录集
		m_pRs->Open(_bstr_t(lpszSQL),(IDispatch*)m_pConn,adOpenDynamic,
			adLockOptimistic,adCmdText);
		if(!m_pRs->adoEOF) 
		{ 
			_variant_t thevalue = m_pRs->GetCollect(_variant_t((short)0));
			value = vartostr(thevalue);			
		} 
		m_pRs->Close(); 
	}
	catch (_com_error e)//异常处理 
	{ 
		AfxMessageBox(e.ErrorMessage()); 
	} 
}


void CAdoDB::ExecuteQuery(LPCTSTR lpszSQL,CDStrs& Fields)
{
	try
	{
		//打开记录集
		m_pRs->Open(_bstr_t(lpszSQL),(IDispatch*)m_pConn,adOpenDynamic,
			adLockOptimistic,adCmdText);
		while(!m_pRs->adoEOF) 
		{ 
			CStrs strs;
			_variant_t thevalue ;
			//获取一条记录中的所有字段值保存到字符串数组strs中
			int size = m_pRs->Fields->Count;
			for(long index = 0 ; index < m_pRs->Fields->Count; index++){
				thevalue = m_pRs->GetCollect(_variant_t(index));
				CString temp = vartostr(thevalue);
				strs.push_back(temp);
			}
			//保存一条记录到二维字符串数组中
			Fields.push_back(strs);
			//转到下一条纪录
			m_pRs->MoveNext(); 
		} 
		m_pRs->Close(); 
	}
	catch (_com_error e)//异常处理 
	{ 
		AfxMessageBox(e.ErrorMessage()); 
	} 
}

CString CAdoDB::vartostr(_variant_t &var)
{
	CString strValue;	
	switch (var.vt)
	{
	//字符串
	case VT_BSTR:
	case VT_LPSTR:
	case VT_LPWSTR:
		strValue = (LPCTSTR)(_bstr_t)var;
		break;
	//BYTE类型
	case VT_I1:
	case VT_UI1:
		strValue.Format("%d", var.bVal);
		break;
	//短整型
	case VT_I2:
		strValue.Format("%d", var.iVal);
		break;
	//无符号短整型
	case VT_UI2:
		strValue.Format("%d", var.uiVal);
		break;
	//整型
	case VT_INT:
		strValue.Format("%d", var.intVal);
		break;
	//整型
	case VT_I4: 
		strValue.Format("%d", var.lVal);
		break;
	//长整型
	case VT_I8: 
		strValue.Format("%d", var.lVal);
		break;
	//无符号整型
	case VT_UINT:
		strValue.Format("%d", var.uintVal);
		break;
	//无符号整型
	case VT_UI4: 
		strValue.Format("%d", var.ulVal);
		break;
	//无符号长整型
	case VT_UI8: 
		strValue.Format("%d", var.ulVal);
		break;
	case VT_VOID:
		strValue.Format("%8x", var.byref);
		break;
	//浮点型,保持两位小数
	case VT_R4:
		strValue.Format("%.2f", var.fltVal);
		break;
	//双精度型,保持两位小数
	case VT_R8:
		strValue.Format("%.2f", var.dblVal);
		break;
	//数值型,保持两位小数
	case VT_DECIMAL: 
		strValue.Format("%.2f", (double)var);
		break;
    //货币型
	case VT_CY:
		{
			COleCurrency cy = var.cyVal;
			strValue = cy.Format();
		}
		break;
	//blob型数据
	case VT_BLOB:
	case VT_BLOB_OBJECT:
	case 0x2011:
		strValue = "[BLOB]";
		break;
	//布尔型
	case VT_BOOL:		
		strValue = var.boolVal ? "TRUE" : "FALSE";
		break;
	//日期型
	case VT_DATE: 
		{
			DATE dt = var.date;
			COleDateTime oleDt = COleDateTime(dt); 
			strValue = oleDt.Format("%Y-%m-%d %H:%M:%S");
		}
		break;
	//NULL值
	case VT_NULL:
		strValue = "";
		break;
	case VT_EMPTY:
		strValue = "";
		break;
	case VT_UNKNOWN://未知类型
	default:
		strValue = "UN_KNOW";
		break;
	}
	return strValue;
}

⌨️ 快捷键说明

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