📄 adoconn.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 + -