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

📄 adoconn.cpp

📁 ADO访问数据库,将其解压
💻 CPP
字号:
// ADOConn.cpp: implementation of the CADOConn class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "ADOConn.h"

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

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

ADOConn::ADOConn()
{
	memset(error,0,1024);
}

ADOConn::~ADOConn()
{

}

//////////////////////////////////////////////////////////////////////
// CADOException Class
//////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CADOException::CADOException(char* pchMessage)
{
	m_strMessage = pchMessage;
	m_nError = GetLastError();
}
BOOL CADOException::GetErrorMessage(LPTSTR lpstrError, UINT nMaxError,PUINT pnHelpContext /*= NULL*/)
{
	
	char text[200];
	if(m_nError == 0) 
	{
		wsprintf(text, "%s error", (const char*) m_strMessage);
	}
	else 
	{
		wsprintf(text, "%s error #%d", (const char*) m_strMessage, m_nError);
	}
	strncpy(lpstrError, text, nMaxError - 1);
	return TRUE;
}

BOOL ADOConn::OnInitADOConn(LPCTSTR ConnStr)
{
	::CoInitialize(NULL);
	
	try
	{
		// 创建Connection对象
		m_pConnection.CreateInstance("ADODB.Connection");
		// 设置连接字符串,必须是BSTR型或者_bstr_t类型
		_bstr_t strConnect = _bstr_t(ConnStr);//"Provider=SQLOLEDB; Server=127.0.0.1;Database=EventLogg; uid=event; pwd=event;";
		m_pConnection->Open(strConnect,"","",adModeUnknown);
		return TRUE;
	}
	// 捕捉异常
	catch(_com_error e)
	{
		// 显示错误信息
		TRACE(e.Description());
//		sprintf(error,"连接数据库失败 请检查连接字符串\r\n当前连接字符串为:%s",ConnStr);
//		throw new CADOException(error);
		throw new CADOException("连接数据库失败");
	}
	
}

//执行SQL语句  包含update delete insert
BOOL ADOConn::ExecuteSQL(LPCTSTR lpszSQL)
{
	//	_variant_t RecordsAffected;
	try
	{
		// Connection对象的Execute方法:(_bstr_t CommandText, 
		// VARIANT * RecordsAffected, long Options ) 
		// 其中CommandText是命令字串,通常是SQL命令。
		// 参数RecordsAffected是操作完成后所影响的行数, 
		// 参数Options表示CommandText的类型:adCmdText-文本命令;adCmdTable-表名
		// adCmdProc-存储过程;adCmdUnknown-未知
		m_pConnection->Execute(_bstr_t(lpszSQL),NULL,adCmdText);
		return true;
	}
	catch(_com_error e)
	{
		// 显示错误信息
		CString str;
		TRACE(e.Description());
		str=(char *)e.Description();
		sprintf(error,"%s",str);
		throw new CADOException(error);
	}
	
}


//执行SELECT语句,获得结果集,结果集放在m_pRecordset中
_RecordsetPtr& ADOConn::GetRecordSet(LPCTSTR lpszSQL)
{
	try
	{
		// 创建记录集对象
		m_pRecordset.CreateInstance(__uuidof(Recordset));
		// 取得表中的记录
		m_pRecordset->Open(_bstr_t(lpszSQL),m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
	}
	// 捕捉异常
	catch(_com_error e)
	{
		// 显示错误信息
		CString str;
		TRACE(e.Description());
		str=(char *)e.Description();
		sprintf(error,"%s",str);
		throw new CADOException(error);
	}
	// 返回记录集
	return m_pRecordset;
}
VARIANT ADOConn::GetCollect(LPCTSTR Name)
{
//	char lpDest[1000];
//	memset(lpDest,0,1000);
//	CString s="";
	VARIANT  vt;
	try
	{
		vt = m_pRecordset->GetCollect(Name);
/*
		_bstr_t bstr = (_bstr_t)vt;
		if(lpDest != "")
		{
			strcpy(lpDest,bstr);
			s=lpDest;
		}*/

	}
	catch (_com_error e)
	{
		CString str;
		TRACE(e.Description());
		str=(char *)e.Description();
		sprintf(error,"%s",str);
		throw new CADOException(error);
	}
	return vt;
// 	return s;
}
//获取某个字段的值
BOOL ADOConn::GetCollect(LPCTSTR Name, char *lpDest)
{
	VARIANT  vt;
	try
	{
		vt = m_pRecordset->GetCollect(Name);
		_bstr_t bstr = (_bstr_t)vt;
		if(lpDest != "")
		{
			strcpy(lpDest,bstr);
		}
	}
	catch (_com_error e)
	{
		CString str;
		TRACE(e.Description());
		str=(char *)e.Description();
		sprintf(error,"%s",str);
		throw new CADOException(error);
	}
	return TRUE;
}
//关闭数据库 
BOOL ADOConn::CloseADOConnection()
{
	try
	{
		m_pConnection->Close();
	}
	catch (_com_error e)
	{
		TRACE(e.Description());
		sprintf(error,e.Description());
		throw new CADOException("关闭数据库失败");
	}
	return TRUE;
}
//关表
BOOL ADOConn::CloseTable()
{
	try
	{
		m_pRecordset->Close();
	}
	catch (_com_error e)
	{
		TRACE(e.Description());
		sprintf(error,e.Description());
		throw new CADOException("关闭表失败");
	}
	return TRUE;
}
//下一个
BOOL ADOConn::MoveNext()
{
	try
	{
		m_pRecordset->MoveNext();
	}
	catch (_com_error e)
	{
		TRACE(e.Description());
		sprintf(error,e.Description());
		throw new CADOException("结果集移向下一个失败");
	}
	return TRUE;
}
//尾
BOOL ADOConn::adoEOF()
{
	return m_pRecordset->adoEOF;
}
//头
BOOL ADOConn::adoBOF()
{
	return m_pRecordset->adoBOF;
}
//事务开始
BOOL ADOConn::BeginTrans()
{
	try
	{
		m_pConnection->BeginTrans();
	}
	catch (_com_error e) 
	{
		TRACE(e.Description());
		sprintf(error,e.Description());
		throw new CADOException("事务开始失败");
	}	
	return TRUE;
}
//递交事务
BOOL ADOConn::CommitTrans()
{
	try
	{
		m_pConnection->CommitTrans();
	}
	catch (_com_error e)
	{
		TRACE(e.Description());
		sprintf(error,e.Description());
		throw new CADOException("递交事务失败");
	}
	return TRUE;
}
//事务回滚
BOOL ADOConn::RollbackTrans()
{
	try
	{
		m_pConnection->RollbackTrans();
	}
	catch (_com_error e)
	{
		TRACE(e.Description());
		sprintf(error,e.Description());
		throw new CADOException("回滚事务失败");
	}
	return TRUE;
}

void ADOConn::ExitConnect()
{
	// 关闭记录集和连接
	if (m_pRecordset != NULL)
		m_pRecordset->Close();
	m_pConnection->Close();
	// 释放环境
	::CoUninitialize();
}

BOOL ADOConn::ExecuteProc(LPCTSTR lpszSQL)
{
	//	_variant_t RecordsAffected;
	try
	{
		// Connection对象的Execute方法:(_bstr_t CommandText, 
		// VARIANT * RecordsAffected, long Options ) 
		// 其中CommandText是命令字串,通常是SQL命令。
		// 参数RecordsAffected是操作完成后所影响的行数, 
		// 参数Options表示CommandText的类型:adCmdText-文本命令;adCmdTable-表名
		// adCmdProc-存储过程;adCmdUnknown-未知
		m_pConnection->Execute(_bstr_t(lpszSQL),NULL,adCmdStoredProc);
		return true;
	}
	catch(_com_error e)
	{
		TRACE(e.Description());
//		sprintf(error,"\t执行SQL语句失败\r\n SQL语句为:%s",lpszSQL);
//		throw new CADOException(error);
		throw new CADOException("执行SQL语句失败");
	}
	
}
BOOL ADOConn::ExecuteProc(LPCTSTR lpszSQL,const vector<CString> &key,const vector<CString> &value)
{
	try
	{
		CString s1="";
		CString s2="";
		_CommandPtr   pCmd;  
		pCmd.CreateInstance(__uuidof(Command));
		typedef vector<_ParameterPtr> parameter;
		parameter para;
		_ParameterPtr   pParam1,pParam2,pParam3,pParam4,pParam5;
		pCmd->CommandType=ADODB::adCmdStoredProc;
		pCmd->CommandText=lpszSQL;
/*		pParam1.CreateInstance("ADODB.Parameter");
		s1=map_it->first;
		s2=map_it->second;
		pParam1=pCmd->CreateParameter(_bstr_t(map_it->first),ADODB::adVarChar,ADODB::adParamInput,map_it->second.GetLength(),_variant_t(map_it->second));
		pCmd->Parameters->Append(pParam1);
*/		pCmd->ActiveConnection = m_pConnection;
		for(size_t size=0;size<key.size();++size)
		{
			switch(size)
			{
				case 0:
					{
						pParam1.CreateInstance("ADODB.Parameter");
						s1=key[size];
						s2=value[size];
						pParam1=pCmd->CreateParameter(_bstr_t(key[size]),ADODB::adVarChar,ADODB::adParamInput,value[size].GetLength(),_variant_t(value[size]));
						pCmd->Parameters->Append(pParam1);
					}
					break;
				case 1:
					{
						s1=key[size];
						s2=value[size];
						pParam2.CreateInstance("ADODB.Parameter");
						pParam2=pCmd->CreateParameter(_bstr_t(key[size]),ADODB::adVarChar,ADODB::adParamInput,value[size].GetLength(),_variant_t(value[size]));
						pCmd->Parameters->Append(pParam2);
					}
					break;
				case 2:
					{
						s1=key[size];
						s2=value[size];
						pParam3.CreateInstance("ADODB.Parameter");
						pParam3=pCmd->CreateParameter(_bstr_t(key[size]),ADODB::adVarChar,ADODB::adParamInput,value[size].GetLength(),_variant_t(value[size]));
						pCmd->Parameters->Append(pParam3);
					}
					break;
			}
		}
		// Connection对象的Execute方法:(_bstr_t CommandText, 
		// VARIANT * RecordsAffected, long Options ) 
		// 其中CommandText是命令字串,通常是SQL命令。
		// 参数RecordsAffected是操作完成后所影响的行数, 
		// 参数Options表示CommandText的类型:adCmdText-文本命令;adCmdTable-表名
		// adCmdStoredProc-存储过程;adCmdUnknown-未知
		pCmd->Execute(NULL,NULL,ADODB::adCmdStoredProc);
		return true;
	}
	catch(_com_error e)
	{
		CString str;
		TRACE(e.Description());
		str=(char *)e.Description();
		sprintf(error,"%s",str);
		throw new CADOException(error);
	}
}

⌨️ 快捷键说明

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