📄 adodatabase.cpp
字号:
#import "C:\Program Files\Common Files\System\ADO\msado15.dll" \
no_namespace rename("EOF", "EndOfFile")
#include "StdAfx.h"
#include "ADODataBase.h"
#include "stdio.h"
#include "stdlib.h"
#include "stdarg.h"
//LogFile CADODataBase::m_LogFile = LogFile();
CADODataBase::~CADODataBase()
{
CoUninitialize();
//m_pConn->Close();
}
HRESULT CADODataBase::Init()
{
if FAILED(CoInitialize(NULL))
{
CoUninitialize();
return E_UNEXPECTED;
}
m_pRS = NULL;
m_pConn = NULL;
memset(m_pConnString,0,512);
memset(m_pUserId,0,256);
memset(m_pUserPassword,0,256);
memset(m_pQueryString,0,1024);
memset(m_pProvider,0,256);
memset(m_pDataSource,0,MAX_PATH);
memset(m_pInitialCatalog,0,256);
memset(m_pExtendedProperties,0,256);
return S_OK;
}
void CADODataBase::SetUserId(const char* a_pUserId)
{
strcpy(m_pUserId,a_pUserId);
}
void CADODataBase::SetUserPassword(const char* a_pUserPassword)
{
strcpy(m_pUserPassword,a_pUserPassword);
}
void CADODataBase::SetQueryString(const char* a_pQueryString)
{
strcpy(m_pQueryString,a_pQueryString);
}
void CADODataBase::SetProvider(const char* a_pProvider)
{
strcpy(m_pProvider,a_pProvider);
}
void CADODataBase::SetDataSource(const char* a_pDataSource)
{
strcpy(m_pDataSource,a_pDataSource);
}
void CADODataBase::SetInitialCatalog(const char* a_pInitialCatalog)
{
strcpy(m_pInitialCatalog,a_pInitialCatalog);
}
void CADODataBase::SetExtendedProperties(const char* a_pExtendedProperties)
{
strcpy(m_pExtendedProperties,a_pExtendedProperties);
}
void CADODataBase::SetConnString(const char* a_pConnString)
{
strcpy(m_pConnString,a_pConnString);
}
void CADODataBase::SetConnectionTimeOut(const int a_iConnTimeOut)
{
m_pConn->ConnectionTimeout = a_iConnTimeOut;
}
char* CADODataBase::BuildConnString()
{
sprintf(
m_pConnString,"Provider=%s; \
Data Source=%s; \
Initial Catalog=%s; \
Extended Properties=%s; \
User Id=%s; \
Password=%s;", \
m_pProvider,m_pDataSource,m_pInitialCatalog,
m_pExtendedProperties,m_pUserId,m_pUserPassword);
return m_pConnString;
}
HRESULT CADODataBase::ConnectToDB()
{
HRESULT hr = S_OK;
try
{
hr = m_pConn.CreateInstance(__uuidof(Connection));
hr = m_pConn->Open(m_pConnString,m_pUserId,m_pUserPassword,adConnectUnspecified);
return hr;
}
catch(_com_error &a_pComError)
{
TraceCOMExceptions(a_pComError);
TraceProviderExceptions(m_pConn);
return NULL;
}
}
_RecordsetPtr CADODataBase::GetRecordSet()
{
return m_pRS;
}
void CADODataBase::PrintRecordSet(const long a_lNoOfRecords = 30)
{
try
{
m_pRS->MoveFirst();
_bstr_t bstrRecordsSet= m_pRS->GetString(adClipString,a_lNoOfRecords,"\t","\n","");
printf("\nListing of all Records:\n");
printf("%s",(LPCSTR)bstrRecordsSet);
}
catch(_com_error &a_pComError)
{
TraceCOMExceptions(a_pComError);
TraceProviderExceptions(m_pConn);
}
}
_RecordsetPtr CADODataBase::ExecuteQuery()
{
try
{
m_pRS = m_pConn->Execute(m_pQueryString,NULL,adCmdText);
return m_pRS;
}
catch(_com_error &a_pComError)
{
TraceCOMExceptions(a_pComError);
return NULL;
}
}
_RecordsetPtr CADODataBase::ExecuteQuery(char a_pQueryString[1024])
{
try
{
m_pRS = m_pConn->Execute(a_pQueryString,NULL,adCmdText);
return m_pRS;
}
catch(_com_error &a_pComError)
{
TraceCOMExceptions(a_pComError);
return NULL;
}
}
void CADODataBase::TraceCOMExceptions(_com_error &a_pComError)
{
try
{
char l_pchErrorString[512];
sprintf(l_pchErrorString,"Error Start: ---------------------------------\
\nCode = %08lx\nMessage = %s\nSource = %s\nDescription = %s\
\nError End ------------------------------\n",\
a_pComError.Error(),a_pComError.ErrorMessage(),(LPCSTR) a_pComError.Source(),\
(LPCSTR) a_pComError.Description());
TRACE(l_pchErrorString);
}
catch(...)
{
}
}
void CADODataBase::TraceProviderExceptions(_ConnectionPtr a_pConnPtr)
{
try
{
// Print Provider Errors from Connection object.
// pErr is a record object in the Connection's Error collection.
ErrorPtr pErr = NULL;
if( (a_pConnPtr->Errors->Count) > 0)
{
long nCount = a_pConnPtr->Errors->Count;
// Collection ranges from 0 to nCount -1.
for(long i = 0; i < nCount; i++)
{
pErr = a_pConnPtr->Errors->GetItem(i);
char l_pchErrorString[512];
sprintf(l_pchErrorString,"Error:\n Error number: %x\t%s", pErr->Number,
pErr->Description);
TRACE(l_pchErrorString);
}
}
}
catch(...)
{
}
}
HRESULT CADODataBase::CloseConn()
{
try
{
if(m_pConn!= NULL)
return m_pConn->Close();
return S_OK;
}
catch(_com_error &a_pComError)
{
TraceCOMExceptions(a_pComError);
TraceProviderExceptions(m_pConn);
return E_UNEXPECTED;
}
}
HRESULT CADODataBase::CloseRecordSet()
{
try
{
if(m_pRS!= NULL)
return m_pRS->Close();
return S_OK;
}
catch(_com_error &a_pComError)
{
TraceCOMExceptions(a_pComError);
TraceProviderExceptions(m_pConn);
return E_UNEXPECTED;
}
}
HRESULT CADODataBase::InsertRecord(const char* a_pcTableName,const char* a_pcFirstElement,...)
{
try
{
strcat(m_pQueryString,"INSERT INTO ");
strcat(m_pQueryString,a_pcTableName);
strcat(m_pQueryString, " VALUES (");
char *l_pcElement = (char*)a_pcFirstElement;
va_list l_marker;
va_start(l_marker,a_pcFirstElement);
while(l_pcElement != NULL)
{
strcat(m_pQueryString,"'");
strcat(m_pQueryString, l_pcElement);
strcat(m_pQueryString,"'");
strcat(m_pQueryString,",");
l_pcElement = va_arg(l_marker,char*);
}
va_end(l_marker);
char * l_pcLastCommaPos = strrchr(m_pQueryString,',');
*l_pcLastCommaPos = ')';
*(l_pcLastCommaPos+1) = 0;
ExecuteQuery();
strset(m_pQueryString,0);
return S_OK;
}
catch(_com_error &a_pComError)
{
TraceCOMExceptions(a_pComError);
TraceProviderExceptions(m_pConn);
return E_UNEXPECTED;
}
catch(...)
{
printf("\nError while Inserting Record.");
return E_UNEXPECTED;
}
}
HRESULT CADODataBase::CreateTable(const char* a_pcTableName,const char* a_pcFirstElement,...)
{
try
{
strcpy(m_pQueryString,"CREATE TABLE ");
strcat(m_pQueryString,a_pcTableName);
strcat(m_pQueryString," (");
char *l_pcElement = (char*)a_pcFirstElement;
va_list l_marker;
va_start(l_marker,a_pcFirstElement);
int l_iCount=0;
while(l_pcElement != NULL)
{
l_iCount++;
strcat(m_pQueryString, l_pcElement);
strcat(m_pQueryString," ");
if(l_iCount%2==0)
strcat(m_pQueryString,",");
l_pcElement = va_arg(l_marker,char*);
}
va_end(l_marker);
char * l_pcLastCommaPos = strrchr(m_pQueryString,',');
*l_pcLastCommaPos = ')';
*(l_pcLastCommaPos+1) = 0;
ExecuteQuery();
strset(m_pQueryString,0);
return S_OK;
}
catch(_com_error &a_pComError)
{
TraceCOMExceptions(a_pComError);
TraceProviderExceptions(m_pConn);
return E_UNEXPECTED;
}
catch(...)
{
printf("\nError while Inserting Record.");
return E_UNEXPECTED;
}
}
long CADODataBase::GetNoOfColumns()
{
try
{
return m_pRS->Fields->Count;
}
catch(_com_error &a_pComError)
{
TraceCOMExceptions(a_pComError);
return 0L;
}
}
HRESULT CADODataBase::GetColumnNames(char a_pcColumNames[][MAX_FIELD_LENGTH],char a_pcColumnTypes[][MAX_FIELD_TYPE_LENGTH])
{
try
{
_variant_t l_vaIndex;
l_vaIndex.vt = VT_I2;
long l_lNoOfColumns;
l_lNoOfColumns = GetNoOfColumns();
char l_pcColumNames[MAX_FIELD_LENGTH];
for(int l_iIndex = 0 ;l_iIndex < l_lNoOfColumns;l_iIndex++)
{
l_vaIndex.iVal = l_iIndex;
strcpy(l_pcColumNames,m_pRS->Fields->GetItem(l_vaIndex)->Name);
sprintf(a_pcColumNames[l_iIndex],"%s",l_pcColumNames);
ParseColumnTypes(m_pRS->Fields->GetItem(l_vaIndex)->Type,a_pcColumnTypes[l_iIndex]);
}
return S_OK;
}
catch(_com_error &a_pComError)
{
TraceCOMExceptions(a_pComError);
return E_UNEXPECTED;
}
catch(...)
{
printf("\nError Retrieving Column Names.\n");
return E_UNEXPECTED;
}
}
HRESULT CADODataBase::GetOneRow(const long a_lNoOfColumns,_variant_t a_varValue[])
{
try
{
_variant_t l_vaIndex;
l_vaIndex.vt = VT_I2;
//All the values are stored inside a_bstrValue as a string
for(long l_lIndex = 0;l_lIndex<a_lNoOfColumns;l_lIndex++)
{
l_vaIndex.iVal = l_lIndex;
a_varValue[l_lIndex] = m_pRS->Fields->GetItem(l_vaIndex)->Value;
}
return S_OK;
}
catch(_com_error &a_pComError)
{
TraceCOMExceptions(a_pComError);
return E_UNEXPECTED;
}
catch(...)
{
printf("\nError Retrieving Column Names.\n");
return E_UNEXPECTED;
}
}
void CADODataBase::ParseColumnTypes(DataTypeEnum a_DataType, char* l_pcColumnType)
{
try
{
switch (a_DataType)
{
//case adEmpty:
case adTinyInt:strcpy(l_pcColumnType,"TINYINT");break;
case adSmallInt:strcpy(l_pcColumnType,"SMALLINT");break;
case adInteger:strcpy(l_pcColumnType,"INT");break;
case adBigInt:strcpy(l_pcColumnType,"BIGINT");break;
case adUnsignedTinyInt:strcpy(l_pcColumnType,"TINYINT");break;
case adUnsignedSmallInt:strcpy(l_pcColumnType,"SMALLINT");break;
case adUnsignedInt:strcpy(l_pcColumnType,"INT");break;
case adUnsignedBigInt:strcpy(l_pcColumnType,"BIGINT");break;
case adSingle:strcpy(l_pcColumnType,"FLOAT");break;
case adDouble:strcpy(l_pcColumnType,"FLOAT");break;
//case adCurrency:
case adDecimal:strcpy(l_pcColumnType,"DECIMAL(20,5)");break;
case adNumeric:strcpy(l_pcColumnType,"NUMERIC(20)");break;
case adBoolean:strcpy(l_pcColumnType,"INT");break;
//case adError:
//case adUserDefined:
//case adVariant:
//case adIDispatch:
//case adIUnknown:
//case adGUID:
case adDate:strcpy(l_pcColumnType,"DATE");break;
case adDBDate:strcpy(l_pcColumnType,"DATE");break;
case adDBTime:strcpy(l_pcColumnType,"DATETIME");break;
case adDBTimeStamp:strcpy(l_pcColumnType,"DATETIME");break;
case adBSTR: strcpy(l_pcColumnType,"CHAR(50)");break;
case adChar: strcpy(l_pcColumnType,"CHAR(50)");break;
case adVarChar:strcpy(l_pcColumnType,"VARCHAR(50)");break;
case adLongVarChar:strcpy(l_pcColumnType,"VARCHAR(50)");break;
//case adWChar:
//case adVarWChar:
//case adLongVarWChar:
case adBinary:strcpy(l_pcColumnType,"BINARY(50)");break;
case adVarBinary:strcpy(l_pcColumnType,"VARBINARY(50)");break;
//case adLongVarBinary:
//case adChapter:
//case adFileTime:
//case adPropVariant:
//case adVarNumeric:
//case adArray:
default:strcpy(l_pcColumnType,"CHAR(50)");break;
}
}
catch(...)
{
printf("\nError while retrieving column types\n");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -