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

📄 adodb.cpp

📁 自己编写的迷你图书馆的完整程序.VC6MFC编写的,Windows界面.数据采用了Sqlserver2000.压缩包中已包括了数据库.先附加数据库再运行.
💻 CPP
字号:
#include "stdafx.h"
#include "ADODB.h"

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

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

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
	{
		//执行SQL语句
		return m_pConn->Execute(_bstr_t(lpszSQL),&RecordsAffected,adCmdText);
	}
	catch(_com_error e)//异常处理
	{
		AfxMessageBox(e.ErrorMessage());
	}
	return FALSE;
}

_RecordsetPtr CAdoDB::ExecuteQuery(LPCTSTR lpszSQL,long lOptions)//adCmdText
{
	_RecordsetPtr   m_pRecordset;   
	m_pRecordset.CreateInstance("ADODB.Recordset");   
	m_pRecordset->CursorLocation=adUseClient;   
	try   
	{   
		m_pRecordset->Open(lpszSQL,_variant_t((IDispatch*)m_pConn,true),adOpenStatic,adLockOptimistic,adCmdText);   
	}   
	catch(_com_error *e)   
	{   
		AfxMessageBox(e->ErrorMessage());   
	}   

	return m_pRecordset;
}

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