📄 db.cpp
字号:
//////////////////////////////////////////////////////////////////////
// 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 + -