Files
2022-10-26 12:25:11 +08:00

171 lines
3.4 KiB
C++

#include "stdafx.h"
#include "AdoLib.h"
#include "AdoException.h"
#include "AdoConnection.h"
using namespace AdoLib;
// 생성자
CAdoConnection::CAdoConnection()
: m_ConnectionPtr(NULL),
m_lTimeOut(0)
{
}
CAdoConnection::CAdoConnection(char* szConnection, long lTimeOut, bool bNowConnect)
: m_ConnectionPtr(NULL)
{
SetConnectionInfo(szConnection, lTimeOut, bNowConnect);
}
CAdoConnection::CAdoConnection(char* strIP,
UINT nPortNum,
char* szDbName,
char* szID,
char* szPwd,
long lTimeOut,
bool bNowConnect)
: m_ConnectionPtr(NULL)
{
SetConnectionInfo(strIP, nPortNum, szDbName, szID, szPwd, lTimeOut, bNowConnect);
}
CAdoConnection::~CAdoConnection()
{
if(IsConnected()) { DisconnectDBMS(); }
}
// 커낵션 정보 설정
bool CAdoConnection::SetConnectionInfo(char* szConnection, long lTimeOut, bool bNowConnect)
{
m_strConnection = szConnection;
m_lTimeOut = lTimeOut;
if(bNowConnect) { return ConnectDBMS(); }
return true;
}
bool CAdoConnection::SetConnectionInfo(char* strIP,
UINT nPortNum,
char* szDbName,
char* szID,
char* szPwd,
long lTimeOut,
bool bNowConnect)
{
m_lTimeOut = lTimeOut;
m_strConnection = "Provider=sqloledb; ";
m_strConnection += "Data Source=";
m_strConnection += strIP;
m_strConnection += ",";
char strPort[16] = {0};
_itoa_s(nPortNum, strPort, _countof(strPort), 10);
m_strConnection += strPort;
m_strConnection += "; ";
m_strConnection += "Initial Catalog=";
m_strConnection += szDbName;
m_strConnection += "; ";
m_strConnection += "User ID=";
m_strConnection += szID;
m_strConnection += "; ";
m_strConnection += "Password=";
m_strConnection += szPwd;
m_strConnection += ";";
if(bNowConnect) { return ConnectDBMS(); }
return true;
}
// 디비 접속
bool CAdoConnection::ConnectDBMS()
{
try
{
if(IsConnected()) { return true; }
if(NULL == m_ConnectionPtr)
{
m_ConnectionPtr.CreateInstance(__uuidof(ADODB::Connection));
if(NULL == m_ConnectionPtr)
{
return false;
}
}
if(0 != m_lTimeOut) m_ConnectionPtr->ConnectionTimeout = m_lTimeOut;
if(0 != m_lTimeOut) m_ConnectionPtr->CommandTimeout = m_lTimeOut;
m_ConnectionPtr->CursorLocation = ADODB::adUseClient;
m_ConnectionPtr->Open(m_strConnection.c_str(), "", "", ADODB::adConnectUnspecified);
return IsConnected();
}
catch(_com_error& e)
{
throw CAdoException(e.ErrorMessage(), e.Error(), (char*)e.Description(), (char*)e.Source(), "CAdoConnection::ConnectDBMS");
return false;
}
}
// 디비 접속 해제
bool CAdoConnection::DisconnectDBMS()
{
try
{
if(NULL != m_ConnectionPtr)
{
m_ConnectionPtr->Close();
m_ConnectionPtr.Release();
m_ConnectionPtr = NULL;
}
return true;
}
catch(_com_error& e)
{
throw CAdoException(e.ErrorMessage(), e.Error(), (char*)e.Description(), (char*)e.Source(), "CAdoConnection::DisconnectDBMS");
return false;
}
}
// 접속 여부
bool CAdoConnection::IsConnected()
{
if(NULL == m_ConnectionPtr || ADODB::adStateClosed == m_ConnectionPtr->State)
{
return false;
}
int a = 255;
switch(m_ConnectionPtr->State)
{
case ADODB::adStateClosed:
a = 0;
break;
case ADODB::adStateOpen:
a = 1;
break;
case ADODB::adStateConnecting:
a = 2;
break;
case ADODB::adStateExecuting:
a = 4;
break;
case ADODB::adStateFetching:
a = 18;
break;
}
return true;
}
bool CAdoConnection::IsDisconnected()
{
return !IsConnected();
}