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

📄 adodb.cpp

📁 本家庭理财系统是一个简易的家庭理财工具
💻 CPP
字号:
#include "stdafx.h"
#include "AdoDB.h"

CAdoDB::CAdoDB()
{
	::CoInitialize (NULL);
}

CAdoDB::~CAdoDB()
{
	::CoUninitialize();
}

BOOL CAdoDB::Open(LPCTSTR lpszConnect,long lOptions)
{
	m_pConn.CreateInstance("ADODB.Connection");
	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());
	}
}

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)
{
	_variant_t RecordsAffected;
	try
	{
		return m_pConn->Execute(_bstr_t(lpszSQL),&RecordsAffected,adCmdText);
	}
	catch(_com_error e)
	{
		AfxMessageBox(e.ErrorMessage());
	}
	return FALSE;
}

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;
}

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;
			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());
	}
}

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());
	}
}

⌨️ 快捷键说明

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