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

📄 db.cpp

📁 墨香最新私服
💻 CPP
📖 第 1 页 / 共 5 页
字号:

//////////////////////////////////////////////////////////////////////
// Coolwater.Fire version 2001.1.15
// Ultimate Database Gasoline Engine
// If it does not work correctly, plz enter www.coolwater.fire.com 
// 
// programed by Park Sung Jun 
//
//////////////////////////////////////////////////////////////////////
#define _WIN32_WINNT 0x0500

#include "stdafx.h"
#include "DB.h"
#include "dbclass.h"
#include <process.h>
#include "memorypool.h"


//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CDB::CDB(DESC_DBTHREAD* pDesc)
{
	memset(this,0,sizeof(CDB));
	
	m_pDBAdmin	= new DBCON;
	if (m_pDBAdmin == NULL)
		goto FAIL;
	m_pDBClient = new DBCON;
	if (m_pDBClient == NULL)
		goto FAIL;
	
	memset(m_pDBAdmin,0,sizeof(DBCON));
	memset(m_pDBClient,0,sizeof(DBCON));

	m_pDBProcess1 = new CDBProcess;
	if (m_pDBProcess1 == NULL)
		goto FAIL;
	m_pDBProcess2 = new CDBProcess;
	if (m_pDBProcess2 == NULL)
		goto FAIL;
	m_pDBResultMessage1 = new CDBMessage;
	if (m_pDBResultMessage1 == NULL)
		goto FAIL;
	m_pDBResultMessage2 = new CDBMessage;
	if (m_pDBResultMessage2 == NULL)
		goto FAIL;
	
	m_pResultMemory				= NULL;
	m_pDBMessageMemory			= NULL;
	m_pDBMessageResultMemory	= NULL;
	m_pDBStackMemory			= NULL;

	m_dwMessageMaxSize		=	pDesc->dwMessageMaxSize;		// DBMESSAGE 备炼眉狼 弥措 农扁
	m_dwNumofMessage		=	pDesc->dwNumofMessage;			// 弥措 悼矫 孽府 啊瓷 肮荐 
	m_dwResultMaxSize		=	pDesc->dwResultMaxSize;		// 孽府 搬苞狼 弥措 荤捞令(select巩)
	m_dwNumofResult			=	pDesc->dwNumofResult;			// 孽府 搬苞狼 弥措 肮荐  (select巩)
	m_dwSizeofStack			=	pDesc->dwSizeofStack;			// 孽府矫 涝仿茄 牢磊甫 困茄 皋葛府 农扁 

	// DB孽府甫 困茄 皋葛府 钱 积己
	if (m_dwMessageMaxSize < 1 || m_dwMessageMaxSize > 1024)
	{
		MessageBox(NULL,"dwMessageMaxSize is Invalid value: make sure 0~1024","ERROR",NULL);
		goto FAIL;
	}
	if (m_dwNumofMessage < 1 || m_dwNumofMessage > 4096)
	{
		MessageBox(NULL,"dwNumofMessage is Invalid value: make sure 0~4096","ERROR",NULL);
		goto FAIL;
	}
	if (m_dwResultMaxSize < MAX_ROW_NUM*sizeof(QUERYST) || m_dwResultMaxSize > 256000)
	{
		MessageBox(NULL,"dwResultMaxSize is Invalid value: make sure MAX_ROW_NUM*sizeof(QUERYST)~256000","ERROR",NULL);
		goto FAIL;
	}
	if (m_dwNumofResult < 1 || m_dwNumofResult > 1024)
	{
		MessageBox(NULL,"dwNumofResult is Invalid value: make sure 0~1024","ERROR",NULL);
		goto FAIL;
	}
	if (m_dwSizeofStack < 1 || m_dwSizeofStack > 4096)
	{
		MessageBox(NULL,"m_dwSizeofStack is Invalid value: make sure 0~1024","ERROR",NULL);
		goto FAIL;
	}

	m_pDBMessageMemory = new CMemoryPool(m_dwNumofMessage,m_dwMessageMaxSize);
	if(!m_pDBMessageMemory) goto FAIL;

	m_pResultMemory = new CMemoryPool(m_dwNumofResult,m_dwResultMaxSize);
	if(!m_pResultMemory) 	goto FAIL;
	
	m_pDBMessageResultMemory = new CMemoryPool(m_dwNumofMessage,sizeof(DBRESULTMESSAGE));
	if(!m_pDBMessageResultMemory) 	goto FAIL;

	m_pDBStackMemory = new CMemoryPool(m_dwNumofMessage,m_dwSizeofStack);
	if(!m_pDBStackMemory) 	goto FAIL;
	
//	InitializeCriticalSectionAndSpinCount(&m_csDBMessageMemory,200);
//	InitializeCriticalSectionAndSpinCount(&m_csDBStackMemory,200);
//	InitializeCriticalSectionAndSpinCount(&m_csDBResultMemory,200);
//	InitializeCriticalSectionAndSpinCount(&m_csDBResultStackMemory,200);

	return;

FAIL:
	return;
//	m_pWriteMessage("Initial Error : Close App");
}


CDB::~CDB()
{
	CloseDBConnection();

	delete m_pDBClient;
	delete m_pDBAdmin;
	delete m_pDBProcess1;
	delete m_pDBProcess2;
	delete m_pDBResultMessage1;
	delete m_pDBResultMessage2;

//	DeleteCriticalSection(&m_csDBMessageMemory);
//	DeleteCriticalSection(&m_csDBStackMemory);
//	DeleteCriticalSection(&m_csDBResultMemory);
//	DeleteCriticalSection(&m_csDBResultStackMemory);

	if (m_pResultMemory) 
		delete m_pResultMemory;

	if (m_pDBMessageMemory) 
		delete m_pDBMessageMemory;

	if (m_pDBMessageResultMemory) 
		delete m_pDBMessageResultMemory;

	if (m_pDBStackMemory)
		delete 	m_pDBStackMemory;



}

char*	CDB::InitDBConnection(LPSTR szID, LPSTR szPassword, LPSTR Dbname, LPSTR szIDC, LPSTR szPasswordC, LPSTR DbnameC)
{
	strcpy(m_pDBAdmin->szDBName,Dbname);
	strcpy(m_pDBAdmin->szID,szID);
	strcpy(m_pDBAdmin->szPW,szPassword);
	strcpy(m_pDBClient->szDBName,DbnameC);
	strcpy(m_pDBClient->szID,szIDC);
	strcpy(m_pDBClient->szPW,szPasswordC);

	return InitDBConnection();
}
////////////////////////////////////////////////////////////////////////////////////////////
// 楷搬阑 汲沥窍绊 檬扁拳茄促.
// 啊厘 刚历 角青且 窃荐 
////////////////////////////////////////////////////////////////////////////////////////////
char* CDB::InitDBConnection()
{
	///////////////////////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////////
	int a=0;	


	RETCODE		retCode;
	int			preceedCode = 0;

	// 券版 勤甸 汲沥 
	retCode = SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&m_hEnv);
	if (SQLOK(retCode))
		preceedCode = 1;
	else 
	{
		m_pWriteMessage("Can't Init SQL Env" );
		goto FAIL;
	}

	///////////////////////////////////////////////////////////////////////////
	a = 100;
	//////////////////////////////////////////////////////////////////////////

	// 券版 函荐 汲沥 
	retCode = SQLSetEnvAttr(m_hEnv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0); 
	if (SQLOK(retCode))
		preceedCode = 2;
	else 
	{
		m_pWriteMessage("Can't Set Attribute SQL Env" );
		goto FAIL;
	}
	
	// 焊救阑 困秦 Admin 拌沥苞 Client 拌沥 滴俺狼 目池记 勤甸阑 汲沥
	retCode = SQLAllocHandle(SQL_HANDLE_DBC,m_hEnv,&(m_pDBAdmin->hDBC));
	if (SQLOK(retCode))
		preceedCode = 3;
	else 
	{
		m_pWriteMessage("Can't Init Connect Handle for Admin" );
		goto FAIL;
	}
	
	// 焊救阑 困秦 Admin 拌沥苞 Client 拌沥 滴俺狼 目池记 勤甸阑 汲沥
	retCode = SQLAllocHandle(SQL_HANDLE_DBC,m_hEnv,&(m_pDBClient->hDBC));
	if (SQLOK(retCode))
		preceedCode = 4;
	else 
	{
		m_pWriteMessage("Can't Init Connect Handle for Client" );
		goto FAIL;
	}
	// 立加 鸥烙酒眶 汲沥( 5檬 郴俊 府畔)
	retCode = SQLSetConnectAttr(m_pDBAdmin->hDBC, 3,(void*)SQL_ATTR_LOGIN_TIMEOUT, 0);
	retCode = SQLSetConnectAttr(m_pDBClient->hDBC, 3,(void*)SQL_ATTR_LOGIN_TIMEOUT, 0);
	
	// 角力 SQL 辑滚俊 立加阑 矫档 
	retCode = SQLConnect(m_pDBAdmin->hDBC, (UCHAR *)m_pDBAdmin->szDBName, SQL_NTS, (UCHAR *)m_pDBAdmin->szID, SQL_NTS, (UCHAR *)m_pDBAdmin->szPW, SQL_NTS);

	if (SQLOK(retCode))
		preceedCode = 5;
	else 
	{
		m_pWriteMessage("Can't Connect to SQL server for Admin ID" );
		goto FAIL;
	}
	retCode = SQLConnect(m_pDBClient->hDBC, (UCHAR *)m_pDBClient->szDBName, SQL_NTS, (UCHAR *)m_pDBClient->szID, SQL_NTS, (UCHAR *)m_pDBClient->szPW, SQL_NTS);

	if (SQLOK(retCode))
		preceedCode = 6;
	else 
	{
		m_pWriteMessage("Can't Connect to SQL server for Clinet ID" );
		goto FAIL;
	}

	retCode = SQLAllocHandle(SQL_HANDLE_STMT, m_pDBAdmin->hDBC, &(m_pDBAdmin->hStmt));
	if (SQLOK(retCode))
		preceedCode = 7;
	else 
	{
		m_pWriteMessage("Can't Set STMT for Admin ID" );
		goto FAIL;
	}

	retCode = SQLAllocHandle(SQL_HANDLE_STMT, m_pDBClient->hDBC, &(m_pDBClient->hStmt));
	if (SQLOK(retCode))
		preceedCode = 8;
	else 
	{
		m_pWriteMessage("Can't Set STMT for Client ID" );
		goto FAIL;
	}

	retCode = SQLAllocHandle(SQL_HANDLE_STMT, m_pDBAdmin->hDBC, &(m_pDBAdmin->hScrollStmt));
	if (SQLOK(retCode))
		preceedCode = 9;
	else 
	{
		m_pWriteMessage("Can't Set STMT for Admin ID" );
		goto FAIL;
	}

	retCode = SQLAllocHandle(SQL_HANDLE_STMT, m_pDBClient->hDBC, &(m_pDBClient->hScrollStmt));
	if (SQLOK(retCode))
		preceedCode = 10;
	else 
	{
		m_pWriteMessage("Can't Set STMT for Client ID" );
		goto FAIL;
	}
	if (m_bUsingThread)
		InitDBThread();
	
	m_SucceedInit = TRUE;
	return (char*) 1;

FAIL:
	if (retCode == SQL_INVALID_HANDLE)
		m_pWriteMessage("SQL_INVALID_HANDLE");
	// 俊矾 皋技瘤 秦搬 
	switch(preceedCode)
	{
	case 0:
	case 1:
		DisplaySQLError(m_pDBAdmin);
		break;
	case 2:
	case 4:
	case 6:
	case 8:
		DisplaySQLError(m_pDBAdmin);
		break;
	case 3:
	case 5:
	case 7:
	case 9:
		DisplaySQLError(m_pDBClient);
		break;
	}

	return NULL;
}


///////////////////////////////////////////////////////////////////////////////////////////////////////
// 货肺款 目池记阑 眠啊茄促.
// 扁粮狼 目池记 捞寇狼 目池记捞 鞘夸且 版快 捞 窃荐甫 角青茄促.
// 己傍 : 且寸等 目池记狼 器牢磐.
// 角菩 : NULL 
//////////////////////////////////////////////////////////////////////////////////////////////////////
LPDBCON	CDB::MakeNewConnection(LPSTR lpDbName, LPSTR lpID, LPSTR lpPW)
{
	if (m_NumConnection == MAX_NUM_SQL_CONNECTION) return NULL;

	LPDBCON lpTemp = NULL;
	lpTemp = new DBCON;
	if (lpTemp == NULL) return NULL;
	m_NumConnection++;
	memset(lpTemp,0,sizeof(DBCON));

	for (int k=0;k<MAX_NUM_SQL_CONNECTION;k++)
		if (m_ArrayCon[k] == NULL) 
		{
			m_ArrayCon[k] = lpTemp;
			break;
		}

	strcpy(lpTemp->szDBName,lpDbName);
	strcpy(lpTemp->szID,lpID);
	strcpy(lpTemp->szPW,lpPW);

	RETCODE		retCode;
	
	retCode = SQLAllocHandle(SQL_HANDLE_DBC,m_hEnv,&(lpTemp->hDBC));
	if (!SQLOK(retCode))
	{
		m_pWriteMessage("Can't Init Connect Handle" );
		goto FAIL;
	}
	// 立加 鸥烙酒眶 汲沥( 5檬 郴俊 府畔)
	retCode = SQLSetConnectAttr(lpTemp->hDBC, 3,(void*)SQL_ATTR_LOGIN_TIMEOUT, 0);
	
	// 角力 SQL 辑滚俊 立加阑 矫档 
	retCode = SQLConnect(lpTemp->hDBC, (UCHAR *)lpTemp->szDBName, SQL_NTS, (UCHAR *)lpTemp->szID, SQL_NTS, (UCHAR *)lpTemp->szPW, SQL_NTS);
	if (!SQLOK(retCode))
	{
		m_pWriteMessage("Can't Connect to SQL server" );
		goto FAIL;
	}
	retCode = SQLAllocHandle(SQL_HANDLE_STMT, lpTemp->hDBC, &(lpTemp->hStmt));
	if (!SQLOK(retCode))
	{
		m_pWriteMessage("Can't Set STMT" );
		goto FAIL;
	}
	retCode = SQLAllocHandle(SQL_HANDLE_STMT, lpTemp->hDBC, &(lpTemp->hScrollStmt));
	if (!SQLOK(retCode))
	{
		m_pWriteMessage("Can't Set STMT" );
		goto FAIL;
	}

	return lpTemp;

FAIL:
	if (retCode == SQL_INVALID_HANDLE)
		m_pWriteMessage("SQL_INVALID_HANDLE");
	DisplaySQLError(lpTemp);
	CloseThisConnection(lpTemp);
	return NULL;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////
// MakeNewConnection阑 烹秦 眠啊茄 绢恫 目池记阑 秦力茄促.
//////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL CDB::CloseThisConnection(LPDBCON pCon)
{
	if (m_NumConnection == 0) return false;
	if (pCon == NULL) return false;
	
	SQLCloseCursor(pCon->hStmt);
	SQLFreeHandle(SQL_HANDLE_STMT,pCon->hStmt);
	SQLDisconnect(pCon->hDBC);
	SQLFreeHandle(SQL_HANDLE_DBC, pCon->hDBC);
	delete pCon;
	pCon = NULL;
	m_NumConnection--;
	return true;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -