📄 db.cpp
字号:
}
///////////////////////////////////////////////////////////////////////////////////////////////////////
// MakeNewConnection阑 烹秦 眠啊茄 葛电 目池记阑 秦力茄促.
//////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL CDB::CloseAllCustomConnection()
{
if (m_NumConnection == 0) return true;
BOOL ret;
for (int k=0;k<MAX_NUM_SQL_CONNECTION;k++)
if (m_ArrayCon[k] != NULL)
{
ret = CloseThisConnection(m_ArrayCon[k]);
if(!ret) m_pWriteMessage("CloseAllCustomConnection : Close Error");
}
if(m_NumConnection) return false;
return true;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////
// SQL 俊矾 免仿 风凭
//////////////////////////////////////////////////////////////////////////////////////////////////////
void CDB::DisplaySQLError(LPDBCON pCon)
{
UCHAR szSqlState[MSG_BUF_SIZE];
UCHAR szErrorMsg[MSG_BUF_SIZE];
SQLINTEGER fNativeError = 0;
SWORD cbErrorMsg = MSG_BUF_SIZE;
RETCODE rc;
rc = SQLError(m_hEnv,
pCon ? pCon->hDBC : 0,
//0,
pCon ? pCon->hStmt : 0,
szSqlState,
&fNativeError,
szErrorMsg,
MSG_BUF_SIZE,
&cbErrorMsg
);
if (rc != SQL_NO_DATA_FOUND || rc != SQL_ERROR)
{
if (fNativeError != 0x1645) // ignore change database to master context message
{
char Buffer[256];
wsprintf(Buffer,"Error Message: %s SqlState: %s, fNativeError: %d",szErrorMsg, szSqlState,fNativeError);
m_pWriteMessage(Buffer);
}
}
else
{
m_pWriteMessage("SQLError() failed: , NO_DATA_FOUND OR SQL_ERROR");
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////
// SQL 俊矾 免仿 风凭
//////////////////////////////////////////////////////////////////////////////////////////////////////
void CDB::DisplaySQLError(LPDBCON pCon, HSTMT hStmt)
{
UCHAR szSqlState[MSG_BUF_SIZE];
UCHAR szErrorMsg[MSG_BUF_SIZE];
SQLINTEGER fNativeError = 0;
SWORD cbErrorMsg = MSG_BUF_SIZE;
RETCODE rc;
rc = SQLError(m_hEnv,
pCon ? pCon->hDBC : 0,
pCon ? hStmt : 0,
szSqlState,
&fNativeError,
szErrorMsg,
MSG_BUF_SIZE,
&cbErrorMsg
);
if (rc != SQL_NO_DATA_FOUND || rc != SQL_ERROR)
{
if (fNativeError != 0x1645) // ignore change database to master context message
{
char Buffer[256];
wsprintf(Buffer,"Error Message: %s SqlState: %s, fNativeError: %d",szErrorMsg, szSqlState,fNativeError);
m_pWriteMessage(Buffer);
}
}
else
{
m_pWriteMessage("SQLError() failed: , NO_DATA_FOUND OR SQL_ERROR");
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
// SQL 辑滚狼 沥焊甫 罐酒柯促.
// 牢磊 : 目池记 器牢磐, 龙狼且 沥焊鸥涝, 沥焊甫 淬阑 器牢磐
// 己傍咯何甫 府畔
///////////////////////////////////////////////////////////////////////////////////////////////////////
SQLRETURN CDB::GetSQLInfo(LPDBCON pCon, SQLUSMALLINT InfoType, SQLUINTEGER fFuncs)
{
SQLRETURN ret;
ret = SQLGetInfo(pCon->hDBC,
InfoType,
(SQLPOINTER)&fFuncs,
sizeof(fFuncs),
NULL);
return ret;
}
////////////////////////////////////////////////////////////////////////////////////////////
// 楷搬阑 摧绊 勤甸阑 馆券
// 局敲府纳捞记 辆丰 傈俊 角青
////////////////////////////////////////////////////////////////////////////////////////////
void CDB::CloseDBConnection()
{
if(m_bUsingThread)
CloseDBThread();
if (CloseAllCustomConnection() == false)
m_pWriteMessage("Some Error at Counting Custom Connection");
if (m_SucceedInit)
{
if (m_pDBClient->hStmt) SQLCloseCursor(m_pDBClient->hStmt);
if (m_pDBAdmin->hStmt) SQLCloseCursor(m_pDBAdmin->hStmt);
// 巩厘 勤甸 馆券
if (m_pDBClient->hStmt) SQLFreeHandle(SQL_HANDLE_STMT,m_pDBClient->hStmt);
if (m_pDBAdmin->hStmt) SQLFreeHandle(SQL_HANDLE_STMT,m_pDBAdmin->hStmt);
// 辑滚 楷搬 秦力
SQLDisconnect(m_pDBAdmin->hDBC);
SQLDisconnect(m_pDBClient->hDBC);
// 勤甸 馆券
SQLFreeHandle(SQL_HANDLE_DBC, m_pDBClient->hDBC);
SQLFreeHandle(SQL_HANDLE_DBC, m_pDBAdmin->hDBC);
SQLFreeHandle(SQL_HANDLE_ENV, m_hEnv);
}
}
////////////////////////////////////////////////////////////////////////////////////////////
// 货肺款 饭内靛甫 眠啊茄促.
// 牢磊
// 目池记, 抛捞喉 捞抚, 抛捞磐漠烦狼 捞抚, 蔼阑 持篮 备炼眉狼 器牢磐, 漠烦俺荐
// sprintf(Buffer, "INSERT INTO %s (FirstName, LastName) VALUES ('Cool','Fire')", szTableName);
////////////////////////////////////////////////////////////////////////////////////////////
BOOL CDB::InsertRecord(LPDBCON pCon, LPSTR szTableName, LPVOID lpCol, LPVOID lpValue, BYTE bNumData)
{
RETCODE retCode;
if (pCon == NULL) return 0;
if (lpCol == NULL || lpValue == NULL || bNumData == 0) return 0;
char Buffer[MAX_LENGTH_QUERY];
switch(bNumData)
{
case 1:
{
LPDATA1 pCol = (LPDATA1) lpCol;
LPDATA1 pValue = (LPDATA1) lpValue;
sprintf(Buffer, "INSERT INTO %s (%s) VALUES ('%s')", szTableName,pCol->Data1, pValue->Data1);
break;
}
case 2:
{
LPDATA2 pCol = (LPDATA2) lpCol;
LPDATA2 pValue = (LPDATA2) lpValue;
sprintf(Buffer, "INSERT INTO %s (%s,%s) VALUES ('%s', '%s')", szTableName,pCol->Data1,pCol->Data2, pValue->Data1,pValue->Data2);
break;
}
case 3:
{
LPDATA3 pCol = (LPDATA3) lpCol;
LPDATA3 pValue = (LPDATA3) lpValue;
sprintf(Buffer, "INSERT INTO %s (%s, %s, %s ) VALUES ('%s','%s','%s')", szTableName,pCol->Data1,pCol->Data2,pCol->Data3,pValue->Data1,pValue->Data2,pValue->Data3);
break;
}
case 4:
{
LPDATA4 pCol = (LPDATA4) lpCol;
LPDATA4 pValue = (LPDATA4) lpValue;
sprintf(Buffer, "INSERT INTO %s (%s, %s, %s, %s ) VALUES ('%s','%s','%s','%s')", szTableName,pCol->Data1,pCol->Data2,pCol->Data3,pCol->Data4, pValue->Data1,pValue->Data2,pValue->Data3,pValue->Data4);
break;
}
case 5:
{
LPDATA5 pCol = (LPDATA5) lpCol;
LPDATA5 pValue = (LPDATA5) lpValue;
sprintf(Buffer, "INSERT INTO %s (%s, %s, %s, %s, %s ) VALUES ('%s','%s','%s','%s','%s')", szTableName,pCol->Data1,pCol->Data2,pCol->Data3,pCol->Data4,pCol->Data5, pValue->Data1,pValue->Data2,pValue->Data3,pValue->Data4,pValue->Data5);
break;
}
case 6:
{
LPDATA6 pCol = (LPDATA6) lpCol;
LPDATA6 pValue = (LPDATA6) lpValue;
sprintf(Buffer, "INSERT INTO %s (%s, %s, %s, %s, %s, %s ) VALUES ('%s','%s','%s','%s','%s','%s')", szTableName,pCol->Data1,pCol->Data2,pCol->Data3,pCol->Data4,pCol->Data5,pCol->Data6, pValue->Data1,pValue->Data2,pValue->Data3,pValue->Data4,pValue->Data5,pValue->Data6);
break;
}
case 7:
{
LPDATA7 pCol = (LPDATA7) lpCol;
LPDATA7 pValue = (LPDATA7) lpValue;
sprintf(Buffer, "INSERT INTO %s (%s, %s, %s, %s, %s, %s, %s) VALUES ('%s','%s','%s','%s','%s','%s','%s')", szTableName,pCol->Data1,pCol->Data2,pCol->Data3,pCol->Data4,pCol->Data5,pCol->Data6, pCol->Data7, pValue->Data1,pValue->Data2,pValue->Data3,pValue->Data4,pValue->Data5,pValue->Data6, pValue->Data7);
break;
}
case 8:
{
LPDATA8 pCol = (LPDATA8) lpCol;
LPDATA8 pValue = (LPDATA8) lpValue;
sprintf(Buffer, "INSERT INTO %s (%s, %s, %s, %s, %s, %s, %s, %s) VALUES ('%s','%s','%s','%s','%s','%s','%s','%s')", szTableName,pCol->Data1,pCol->Data2,pCol->Data3,pCol->Data4,pCol->Data5,pCol->Data6, pCol->Data7,pCol->Data8, pValue->Data1,pValue->Data2,pValue->Data3,pValue->Data4,pValue->Data5,pValue->Data6, pValue->Data7,pValue->Data8);
break;
}
case 9:
{
LPDATA9 pCol = (LPDATA9) lpCol;
LPDATA9 pValue = (LPDATA9) lpValue;
sprintf(Buffer, "INSERT INTO %s (%s, %s, %s, %s, %s, %s, %s, %s,%s) VALUES ('%s','%s','%s','%s','%s','%s','%s','%s','%s')", szTableName,pCol->Data1,pCol->Data2,pCol->Data3,pCol->Data4,pCol->Data5,pCol->Data6, pCol->Data7,pCol->Data8,pCol->Data9, pValue->Data1,pValue->Data2,pValue->Data3,pValue->Data4,pValue->Data5,pValue->Data6, pValue->Data7,pValue->Data8,pValue->Data9);
break;
}
case 10:
{
LPDATA10 pCol = (LPDATA10) lpCol;
LPDATA10 pValue = (LPDATA10) lpValue;
sprintf(Buffer, "INSERT INTO %s (%s, %s, %s, %s, %s, %s, %s, %s,%s,%s) VALUES ('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')", szTableName,pCol->Data1,pCol->Data2,pCol->Data3,pCol->Data4,pCol->Data5,pCol->Data6, pCol->Data7,pCol->Data8,pCol->Data9,pCol->Data10, pValue->Data1,pValue->Data2,pValue->Data3,pValue->Data4,pValue->Data5,pValue->Data6, pValue->Data7,pValue->Data8,pValue->Data9, pValue->Data10);
break;
}
}
if (pCon->hStmt == NULL)
{
retCode = SQLAllocHandle(SQL_HANDLE_STMT, pCon->hDBC, &(pCon->hStmt));
if(retCode != SQL_SUCCESS && retCode != SQL_SUCCESS_WITH_INFO)
DisplaySQLError(pCon);
}
retCode = SQLExecDirect(pCon->hStmt, (UCHAR *)Buffer, SQL_NTS);
if (SQLOK(retCode))
{
return 1;
}
else
DisplaySQLError(pCon);
// pCon->hStmt = NULL;
return 0;
}
////////////////////////////////////////////////////////////////////////////////////////////
// 饭内靛甫 昏力茄促
// 牢磊
// 目池记, 抛捞喉 捞抚, 漠烦捞抚 , 蔼
// lpCol == lpValue 牢 饭内靛甫 昏力茄促.
////////////////////////////////////////////////////////////////////////////////////////////
BOOL CDB::DeleteRecord(LPDBCON pCon, LPSTR szTableName, LPSTR lpCol, LPSTR lpValue)
{
RETCODE retCode;
if (pCon == NULL) return 0;
if (lpCol == NULL || lpValue == NULL) return 0;
char Buffer[MAX_LENGTH_QUERY];
sprintf(Buffer, "DELETE FROM %s where %s = '%s'",szTableName,lpCol,lpValue);
if (pCon->hStmt == NULL)
{
retCode = SQLAllocHandle(SQL_HANDLE_STMT, pCon->hDBC, &(pCon->hStmt));
if(retCode != SQL_SUCCESS && retCode != SQL_SUCCESS_WITH_INFO)
DisplaySQLError(pCon);
}
retCode = SQLExecDirect(pCon->hStmt, (UCHAR *)Buffer, SQL_NTS);
if (SQLOK(retCode))
{
return 1;
}
else
DisplaySQLError(pCon);
// pCon->hStmt = NULL;
return 0;
}
////////////////////////////////////////////////////////////////////////////////////////////
// 饭内靛甫 盎脚茄促
// 牢磊
// 目池记, 抛捞喉 捞抚, 漠烦捞抚 , 蔼
// lpCol == lpValue 牢 饭内靛甫 茫酒辑 DestCol 漠烦狼 蔼阑 DestValue肺 荐沥茄促.
// 父老 lpCol捞 NULL 老 版快 葛电 饭内靛狼 DestCol 漠烦 蔼阑 DestValue肺 荐沥茄促.
////////////////////////////////////////////////////////////////////////////////////////////
BOOL CDB::UpdateRecord(LPDBCON pCon, LPSTR szTableName, LPSTR lpCol, LPSTR lpValue, LPSTR DestCol, LPSTR DestValue)
{
RETCODE retCode;
if (pCon == NULL) return 0;
char Buffer[MAX_LENGTH_QUERY];
if (lpCol == NULL)
sprintf(Buffer, "Update %s set %s = '%s'",szTableName,DestCol, DestValue);
else
sprintf(Buffer, "Update %s set %s = '%s' where %s = '%s'",szTableName,DestCol, DestValue, lpCol,lpValue);
if (pCon->hStmt == NULL)
{
retCode = SQLAllocHandle(SQL_HANDLE_STMT, pCon->hDBC, &(pCon->hStmt));
if(retCode != SQL_SUCCESS && retCode != SQL_SUCCESS_WITH_INFO)
DisplaySQLError(pCon);
}
retCode = SQLExecDirect(pCon->hStmt, (UCHAR *)Buffer, SQL_NTS);
if (SQLOK(retCode))
{
return 1;
}
else
{
switch(retCode)
{
case SQL_NO_DATA:
m_pWriteMessage("Updat Fail : No Data");
break;
case SQL_SUCCESS_WITH_INFO:
break;
case SQL_SUCCESS:
break;
case SQL_STILL_EXECUTING:
break;
case SQL_NEED_DATA:
break;
case SQL_ERROR:
case SQL_INVALID_HANDLE:
default:
DisplaySQLError(pCon);
}
}
// pCon->hStmt = NULL;
return 0;
}
////////////////////////////////////////////////////////////////////////////////////////////
// Update, Delete 橇肺矫廉 傈侩 窃荐.
// 盔窍绰 器杆捞 绝绰 版快 流立 孽府巩阑 累己
// 牢磊狼 箭磊啊 逞 促剧秦 档历洒 嘎苗临荐啊 绝澜..^^;;;
// 窜 select 巩篮 酒贰 促弗 孽府窃荐甫 捞侩且 巴
////////////////////////////////////////////////////////////////////////////////////////////
BOOL CDB::ExcuteIUDForProcedure(LPDBCON pCon, LPSTR szQuery)
{
RETCODE retCode;
if (pCon == NULL) return 0;
char Buffer[MAX_LENGTH_QUERY];
strcpy(Buffer,szQuery);
if (pCon->hStmt == NULL)
{
retCode = SQLAllocHandle(SQL_HANDLE_STMT, pCon->hDBC, &(pCon->hStmt));
if(retCode != SQL_SUCCESS && retCode != SQL_SUCCESS_WITH_INFO)
DisplaySQLError(pCon);
}
HSTMT hStmt;
retCode = SQLAllocHandle(SQL_HANDLE_STMT, pCon->hDBC, &hStmt);
if(retCode != SQL_SUCCESS && retCode != SQL_SUCCESS_WITH_INFO)
DisplaySQLError(pCon);
retCode = SQLExecDirect(hStmt, (UCHAR *)Buffer, SQL_NTS);
// SQLFreeHandle(SQL_HANDLE_STMT,hStmt);
// return retCode;
if (SQLOK(retCode))
{
SQLFreeHandle(SQL_HANDLE_STMT,hStmt);
return 1;
}
else
{
switch(retCode)
{
case SQL_NO_DATA:
m_pWriteMessage("ExcuteIUD Fail : No Data");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -