📄 db.cpp
字号:
if (retCode == SQL_ERROR)
DisplaySQLError(pCon);
SQLCloseCursor(pCon->hStmt);
SQLFreeStmt(pCon->hStmt, SQL_UNBIND);
SQLFreeStmt(pCon->hStmt, SQL_RESET_PARAMS);
return RealData;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 捞 钎矫肺 弓牢 老访狼 窃荐甸篮 胶农费 皋筋靛甫 困茄 窃荐甸捞促.
// 抗甫 甸搁 霸矫魄阑 钎泅且 版快甫 焊搁 葛电 单捞鸥甫 老矫俊 罐酒坷绰 霸 酒聪扼
// 老沥樊狼 饭内靛甫 罐酒坷绊 其捞瘤 窜困肺 罐酒坷绰 巴阑 舅荐 乐促.
// 捞 窃荐甸篮 弊繁 扁瓷阑 瘤盔秦 霖促.
// 溜 饭内靛狼 樊捞 茄锅俊 罐酒坷扁俊 瘤唱摹霸 腹芭唱 老矫俊 促 罐阑 鞘夸啊 绝阑 版快
// 汲沥茄 蔼父怒 饭内靛甫 罐酒坷绊 眠饶 窃荐 荤侩俊 蝶扼 捞饶 肚绰 捞傈狼 饭内靛甫 罐酒棵 荐 乐霸 窍绰 巴捞促.
// 捞 老访狼 窃荐甫 荤侩窍绰 规过篮 SampleGenerateResultSet() 窃荐甫 曼炼且 巴.
// 措帆 鉴辑甫 汲疙窍搁 刚历 GenerateResultSet 甫 角青秦 搬苞悸阑 积己茄 饶
// GetNext, GetLast 殿殿狼 窃荐甫 捞侩秦 盔窍绰 何盒阑 曽柯饶
// CloseRecordSet 窃荐肺 搬苞悸阑 摧绰促.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// GenerateResultSet窃荐
// 窃荐牢磊绰 BindQuery苞 鞍促.
BOOL CDB::GenerateResultSet(LPDBCON pCon, LPSTR szBuffer, LPBIND lpBind, int StSize, SQLSMALLINT sqlType, int Rowset)
{
SQLRETURN retCode; // return code
SQLUSMALLINT RowStatusArray[MAX_ROW_NUM];
if (pCon->hScrollStmt == NULL)
{
retCode = SQLAllocHandle(SQL_HANDLE_STMT, pCon->hDBC, &(pCon->hScrollStmt));
if(retCode != SQL_SUCCESS && retCode != SQL_SUCCESS_WITH_INFO)
DisplaySQLError(pCon,pCon->hScrollStmt);
}
SQLSetCursorName(pCon->hScrollStmt, (SQLCHAR*) &(pCon->szCursorName[0]), SQL_NTS);
SQLSetStmtAttr(pCon->hScrollStmt, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER) SQL_CURSOR_KEYSET_DRIVEN, 0);
SQLSetStmtAttr(pCon->hScrollStmt, SQL_ATTR_ROW_BIND_TYPE, (SQLPOINTER) StSize, 0);
SQLSetStmtAttr(pCon->hScrollStmt, SQL_ATTR_ROW_ARRAY_SIZE,(SQLPOINTER) Rowset, 0);
SQLSetStmtAttr(pCon->hScrollStmt, SQL_ATTR_ROW_STATUS_PTR, RowStatusArray, 0);
SQLSetStmtAttr(pCon->hScrollStmt, SQL_ATTR_ROWS_FETCHED_PTR, &m_NumRowsFetched, 0);
// 皋葛府 官牢爹
for (int k = 0;k < lpBind->nColNum;k++)
{
if (sqlType == NULL)
SQLBindCol(pCon->hScrollStmt,k+1,lpBind->QueryType[k], ((LPROWWISEBIND) lpBind->pData[0])->Data[k],((LPROWWISEBIND) lpBind->pData[0])->Length[k],&(((LPROWWISEBIND) lpBind->pData[0])->LengthRead[k]));
else SQLBindCol(pCon->hScrollStmt,k+1,sqlType, ((LPROWWISEBIND) lpBind->pData[0])->Data[k],((LPROWWISEBIND) lpBind->pData[0])->Length[k],&(((LPROWWISEBIND) lpBind->pData[0])->LengthRead[k]));
}
// 角青
retCode = SQLExecDirect(pCon->hScrollStmt, (UCHAR *)szBuffer, SQL_NTS);
// 单捞磐 菩莫
retCode = SQLFetchScroll(pCon->hScrollStmt,SQL_FETCH_NEXT,0);
if (retCode == SQL_ERROR)
DisplaySQLError(pCon,pCon->hScrollStmt);
// 目辑狼 困摹甫 搬苞悸狼 盖 贸澜
SQLSetPos(pCon->hScrollStmt, 1, SQL_POSITION, SQL_LOCK_NO_CHANGE);
// 犁劝侩窍绰 搬苞悸捞骨肺 橇府窍瘤 臼绰促.
return 1;
}
// 促澜 单捞鸥悸阑 掘绰促.
// 霸矫魄狼 促澜 格废 焊扁扼绊 积阿窍搁 等促.
BOOL CDB::GetNextRecordSet(LPDBCON pCon)
{
SQLRETURN retCode; // return code
retCode = SQLFetchScroll(pCon->hScrollStmt, SQL_FETCH_NEXT, 0);
if (SQLOK(retCode))
return 1;
else if (retCode == SQL_NO_DATA) return 0;
else DisplaySQLError(pCon,pCon->hScrollStmt);
return 0;
}
// 付瘤阜 单捞鸥悸阑 掘绰促.
// 付瘤阜 饭内靛何磐 茄锅俊 免仿且 肮荐措肺 掘绢柯促.
// 霸矫魄狼 俩 付瘤阜 格废 焊绰 扁瓷
BOOL CDB::GetLastRecordSet(LPDBCON pCon)
{
SQLRETURN retCode; // return code
retCode = SQLFetchScroll(pCon->hScrollStmt, SQL_FETCH_LAST, 0);
if (SQLOK(retCode))
return 1;
else if (retCode == SQL_NO_DATA) return 0;
else DisplaySQLError(pCon,pCon->hScrollStmt);
return 0;
}
// 弊傈 单捞鸥悸阑 掘绰促.
// 付瘤阜 菩摹 傈 其捞瘤
// 霸矫魄 格废 弊 傈 格废 焊扁
BOOL CDB::GetPriorRecordSet(LPDBCON pCon)
{
SQLRETURN retCode; // return code
retCode = SQLFetchScroll(pCon->hScrollStmt, SQL_FETCH_PRIOR, 0);
if (SQLOK(retCode))
return 1;
else if (retCode == SQL_NO_DATA) return 0;
else DisplaySQLError(pCon,pCon->hScrollStmt);
return 0;
}
// 霉 其捞瘤甫 掘绰促.
// 霸矫魄狼 俩 梅 格废 焊扁
BOOL CDB::GetFirstRecordSet(LPDBCON pCon)
{
SQLRETURN retCode; // return code
retCode = SQLFetchScroll(pCon->hScrollStmt, SQL_FETCH_FIRST, 0);
if (SQLOK(retCode))
return 1;
else if (retCode == SQL_NO_DATA) return 0;
else DisplaySQLError(pCon,pCon->hScrollStmt);
return 0;
}
// 凯妨柳 勤甸狼 饭内靛 悸阑 摧绊 目辑甫 秦力茄促.
BOOL CDB::CloseRecordSet(LPDBCON pCon)
{
SQLCloseCursor(pCon->hScrollStmt);
SQLFreeStmt(pCon->hScrollStmt, SQL_UNBIND);
SQLFreeStmt(pCon->hScrollStmt, SQL_RESET_PARAMS);
return 1;
}
// 泅犁 目辑狼 困摹俊 乐绰 单捞磐甫 昏力
BOOL CDB::DeleteRecordInCursor(LPDBCON pCon)
{
if (pCon->nCursorNum == 0 ) return 0;
SQLRETURN retCode; // return code
retCode = SQLSetPos(pCon->hScrollStmt, pCon->nCursorNum, SQL_DELETE, SQL_LOCK_NO_CHANGE);
if (SQLOK(retCode))
return 1;
else DisplaySQLError(pCon,pCon->hScrollStmt);
return 0;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 官捞呈府肺 历厘窍扁
// 牢磊绰 目池记 器牢磐, 孽府巩, 历厘且 单捞磐狼 荤捞令, 历厘俊 鞘夸茄 颇扼皋磐甫 淬篮 器牢磐,弊 器牢磐 郴侩狼 辨捞, 角力 历厘且 蔼阑 淬篮 器牢磐
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL CDB::SaveDataByPtr( LPDBCON pCon, char* szQuery, int nSize, LPVOID pPara, long nBuffersize, LPVOID pSettingData)
{
if (pCon == NULL)
return FALSE;
RETCODE retCode;
RETCODE putCode;
SQLPOINTER pParamData;
// long lqitem;
// long leitem;
// long liitem;
long exec;
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 = SQLPrepare(pCon->hStmt, (UCHAR *)szQuery, SQL_NTS);
if (retCode == SQL_SUCCESS || retCode == SQL_SUCCESS_WITH_INFO)
{
retCode = SQLBindParameter(pCon->hStmt, 1, SQL_PARAM_INPUT, SQL_C_BINARY, SQL_BINARY, nSize, 0, pPara, 0, &nBuffersize );
if( !SQLOK( retCode))
{
DisplaySQLError(pCon);
return FALSE;
}
exec = SQL_LEN_DATA_AT_EXEC(0);
retCode = SQLExecute(pCon->hStmt);
if( retCode != SQL_NEED_DATA)
{
DisplaySQLError(pCon);
return FALSE;
}
while( retCode == SQL_NEED_DATA)
{
retCode = SQLParamData(pCon->hStmt, &pParamData);
if( retCode == SQL_NEED_DATA)
{
putCode = SQLPutData(pCon->hStmt, pSettingData, nSize );
if( !SQLOK( putCode))
{
DisplaySQLError(pCon);
return FALSE;
}
}
else break;
}
}
retCode = SQLFreeStmt( pCon->hStmt, SQL_CLOSE );
if( !SQLOK( retCode))
{
return FALSE;
DisplaySQLError(pCon);
}
// pCon->hStmt = NULL;
return TRUE;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 官捞呈府肺 蔼 罐酒坷扁
// 牢磊绰 目池记 器牢磐, 孽府巩, 罐酒棵 辨捞, 罐篮 单捞磐甫 淬阑 器牢磐
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL CDB::LoadDataByPtr( LPDBCON pCon, char* szQuery, int nSize, LPVOID pData)
{
if (pCon == NULL)
return FALSE;
RETCODE retCode;
if (pCon->hStmt == NULL)
{
retCode = SQLAllocHandle(SQL_HANDLE_STMT, pCon->hDBC, &(pCon->hStmt));
if(retCode != SQL_SUCCESS && retCode != SQL_SUCCESS_WITH_INFO)
{
DisplaySQLError(pCon);
return FALSE;
}
}
long IndPtr;
retCode = SQLExecDirect(pCon->hStmt, (UCHAR *)szQuery, SQL_NTS);
if (0 != SQLOK(retCode))
{
retCode = SQLFetch(pCon->hStmt);
if (retCode == SQL_SUCCESS)
{
memset(pData, 0x00, nSize);
retCode = SQLGetData(pCon->hStmt, 1, SQL_C_BINARY, pData, nSize, &IndPtr);
SQLFreeStmt(pCon->hStmt,SQL_CLOSE);
if (retCode == SQL_SUCCESS)
return TRUE;
else
return FALSE;
}
}
DisplaySQLError(pCon);
SQLFreeStmt( pCon->hStmt, SQL_CLOSE);
// pCon->hStmt = NULL;
return FALSE;
}
void CDB::DeleteThisPointer(DWORD dwFnNo, LPVOID pTarget)
{
switch(dwFnNo)
{
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
case 10:
case 11:
case 12:
case 13:
case 14:
break;
case 101: //Free Query
{
LPQUERY pData = (LPQUERY) pTarget;
m_pResultMemory->Free((char*)pData);
break;
}
case 104: //FreeLarge Query
{
LPLARGEQUERY pData = (LPLARGEQUERY) pTarget;
m_pResultMemory->Free((char*)pData);
break;
}
case 105: //FreeMiddle Query
{
LPMIDDLEQUERY pData = (LPMIDDLEQUERY) pTarget;
m_pResultMemory->Free((char*)pData);
break;
}
case 102: // SingleQuery
{
LPQUERY pData = (LPQUERY) pTarget;
m_pResultMemory->Free((char*)pData);
break;
}
case 103: // SingleQueryDA
{
LPQUERYDA pData = (LPQUERYDA) pTarget;
LPDBSDWORD pLength = (LPDBSDWORD) pData->pLength;
LPDBSTRING pDatast = (LPDBSTRING) pData->pData;
delete [] pLength;
delete [] pDatast;
delete pData;
break;
}
}
}
void CDB::FreeDBMessageMemory(char* pTarget)
{
// EnterCriticalSection(&m_csDBMessageMemory);
m_pDBMessageMemory->Free(pTarget);
// LeaveCriticalSection(&m_csDBMessageMemory);
}
DWORD CDB::GetUnusedDBMemoryNum()
{
return m_pDBMessageMemory->GetFreeIndexNum();
// EnterCriticalSection(&m_csDBMessageMemory);
// DWORD temp = m_pDBMessageMemory->GetFreeIndexNum();
// LeaveCriticalSection(&m_csDBMessageMemory);
// return temp;
}
char* CDB::GetDBMessageMemory()
{
return m_pDBMessageMemory->Alloc();
// EnterCriticalSection(&m_csDBMessageMemory);
// char* temp = m_pDBMessageMemory->Alloc();
// LeaveCriticalSection(&m_csDBMessageMemory);
// return temp;
}
void CDB::FreeDBStackMemory(char* pTarget)
{
// EnterCriticalSection(&m_csDBStackMemory);
m_pDBStackMemory->Free(pTarget);
// LeaveCriticalSection(&m_csDBStackMemory);
}
DWORD CDB::GetUnusedStackMemoryNum()
{
return m_pDBStackMemory->GetFreeIndexNum();
// EnterCriticalSection(&m_csDBStackMemory);
// DWORD temp = m_pDBStackMemory->GetFreeIndexNum();
// LeaveCriticalSection(&m_csDBStackMemory);
// return temp;
}
char* CDB::GetDBMessageStackMemory()
{
return m_pDBStackMemory->Alloc();
// EnterCriticalSection(&m_csDBStackMemory);
// char* temp = m_pDBStackMemory->Alloc();
// LeaveCriticalSection(&m_csDBStackMemory);
// return temp;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -