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

📄 adodatabase.cpp

📁 这是一个加油站管理系统
💻 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 + -