?? 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 + -