📄 mysqlrecordset.cpp
字号:
// MYSQLRecordset.cpp: implementation of the CMYSQLRecordset class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include <windows.h>
#include "MYSQLRecordset.h"
#include <atlbase.h>
//
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CMYSQLRecordset::CMYSQLRecordset(CMySQLDatabase* pDatabase):
m_pDatabase(pDatabase)
{
m_hMySQLResult=0;
m_pMySQLRow=0;
}
CMYSQLRecordset::~CMYSQLRecordset()
{
FreeResultset();
}
BOOL CMYSQLRecordset::Open(LPCTSTR lpszSQL)
{
if(!m_pDatabase)
{
return FALSE;
}
if(!m_pDatabase->IsOpen())
{
return FALSE;
}
if (0!=mysql_query(&m_pDatabase->m_MYSQLConnInfo,lpszSQL))
{
return FALSE;
}
FreeResultset();
m_hMySQLResult=mysql_store_result(&m_pDatabase->m_MYSQLConnInfo);
if(0==m_hMySQLResult)
{
return FALSE;
}
long l=0;
MYSQL_FIELD* field=0;
for (l=0;field=mysql_fetch_field(m_hMySQLResult);l++)
{
m_MySQLFieldList.push_back(*field);
}
MoveFirst();
return TRUE;
}
DWORD CMYSQLRecordset::GetRecordCount()
{
if(!m_hMySQLResult)
{
return 0;
}
return mysql_affected_rows(m_pDatabase->m_hMySQL);//return mysql_num_rows(m_hMySQLResult);
}
void CMYSQLRecordset::FreeResultset()
{
if(m_hMySQLResult)
{
mysql_free_result(m_hMySQLResult);
m_hMySQLResult=0;
}
}
short CMYSQLRecordset::GetFieldCount()
{
if(!m_hMySQLResult)
{
return 0;
}
return mysql_num_fields(m_hMySQLResult);
}
BOOL CMYSQLRecordset::IsOpen()
{
if(m_hMySQLResult)
{
return TRUE;
}
else
{
return FALSE;
}
}
void CMYSQLRecordset::GetFieldName(
short nIndex,
std::string& strFieldName
)
{
strFieldName="";
if(nIndex<0)
{
return;
}
if(nIndex>=m_MySQLFieldList.size())
{
return;
}
MYSQL_FIELD* pField=&m_MySQLFieldList[nIndex];
strFieldName=pField->name;
}
short CMYSQLRecordset::GetFieldIndex(const char* pszFieldName)
{
if(!pszFieldName)
{
return -1;
}
if(!m_pMySQLRow)
{
return -1;
}
for (long l=0;l<m_MySQLFieldList.size();l++)
{
if(0==strcmpi(m_MySQLFieldList[l].name,pszFieldName))
{
return l;
}
}
return -1;
}
void CMYSQLRecordset::GetFieldValue( short nIndex, std::string& strValue )
{
if(nIndex<0)
{
return;
}
if(nIndex>=m_MySQLFieldList.size())
{
return;
}
if(!m_pMySQLRow)
{
return;
}
strValue=m_pMySQLRow[nIndex]?m_pMySQLRow[nIndex]:"";
}
BOOL CMYSQLRecordset::MoveFirst()
{
return MoveNext();
}
BOOL CMYSQLRecordset::MoveNext()
{
if(!m_hMySQLResult)
{
return FALSE;
}
m_pMySQLRow =mysql_fetch_row(m_hMySQLResult);
if(!m_pMySQLRow)
{
return FALSE;
}
return TRUE;
}
BOOL CMYSQLRecordset::IsEOF()
{
if(!m_hMySQLResult)
{
return TRUE;
}
if(0==mysql_eof(m_hMySQLResult))
{
return TRUE;
};
if(!m_pMySQLRow)
{
return TRUE;
}
return FALSE;
}
BOOL MySQLGetCfgFromRegistry(
const char* pszKey,
MYSQL_CFG& cfg,
const HKEY hParentKey
)
{
CRegKey reg;
long lRet=0;
lRet=reg.Open(hParentKey,pszKey);
if(ERROR_SUCCESS!=lRet)
{
ASSERT(false);
return FALSE;
}
char szTxt[1024]={0,};
DWORD dwLen=0;
szTxt[0]=0;
dwLen=sizeof(szTxt);
lRet=reg.QueryValue(szTxt,"DBServerIP",&dwLen);
cfg.strServer=szTxt;
szTxt[0]=0;
dwLen=sizeof(szTxt);
lRet=reg.QueryValue(szTxt,"DBUSER",&dwLen);
cfg.strUser=szTxt;
szTxt[0]=0;
dwLen=sizeof(szTxt);
lRet=reg.QueryValue(szTxt,"DBPWD",&dwLen);
cfg.strPwd=szTxt;
szTxt[0]=0;
dwLen=sizeof(szTxt);
lRet=reg.QueryValue(szTxt,"InitDB",&dwLen);
cfg.strDB=szTxt;
return TRUE;
}
void MySQLGetCfgEx(
const char* pszConfigFile,
const char* pszConfigSection,
MYSQL_CFG& cfg
)
{
char szTxt[1024]={0,};
szTxt[0]=0;
GetPrivateProfileString(
pszConfigSection,
"DBServerIP",
"",
szTxt,
sizeof(szTxt),
pszConfigFile
);
cfg.strServer=szTxt;
szTxt[0]=0;
GetPrivateProfileString(
pszConfigSection,
"DBUSER",
"",
szTxt,
sizeof(szTxt),
pszConfigFile
);
cfg.strUser=szTxt;
szTxt[0]=0;
GetPrivateProfileString(
pszConfigSection,
"DBPWD",
"",
szTxt,
sizeof(szTxt),
pszConfigFile
);
cfg.strPwd=szTxt;
szTxt[0]=0;
GetPrivateProfileString(
pszConfigSection,
"InitDB",
"",
szTxt,
sizeof(szTxt),
pszConfigFile
);
cfg.strDB=szTxt;
}
void MySQLGetCfg(
const char* pszConfigFile,
const char* pszConfigSection,
MYSQL_CFG& cfg
)
{
char szTxt[1024]={0,};
szTxt[0]=0;
GetPrivateProfileString(
pszConfigSection,
"DBServerIP",
"",
szTxt,
sizeof(szTxt),
pszConfigFile
);
cfg.strServer=szTxt;
szTxt[0]=0;
GetPrivateProfileString(
pszConfigSection,
"DBUSER",
"",
szTxt,
sizeof(szTxt),
pszConfigFile
);
cfg.strUser=szTxt;
szTxt[0]=0;
GetPrivateProfileString(
pszConfigSection,
"DBPWD",
"",
szTxt,
sizeof(szTxt),
pszConfigFile
);
cfg.strPwd=szTxt;
szTxt[0]=0;
GetPrivateProfileString(
pszConfigSection,
"InitDB",
"",
szTxt,
sizeof(szTxt),
pszConfigFile
);
cfg.strDB=szTxt;
}
BOOL MySQLDBTableDataGet(
CMySQLDatabase& db,
const char* pszSQL,
STD_MAP_STRING_2_STRING& MapFieldToValue,
std::string& strErrorInfo
)
{
//读取指定表的数据
MapFieldToValue.clear();
strErrorInfo="";
CMYSQLRecordset rs(&db);
if(!rs.Open(pszSQL))
{
strErrorInfo=db.GetErrorInfo();
return FALSE;
}
while ( !rs.IsEOF() )
{
for(long l=0;l<rs.GetFieldCount();l++)
{
CString strVal;
CString strKey;
std::string strName;
rs.GetFieldName(l,strName);
strKey=strName.c_str();
std::string strValue;
rs.GetFieldValue((short)l,strValue);
strVal=strValue.c_str();
strKey.MakeLower();
MapFieldToValue.insert(STD_MAP_STRING_2_STRING::value_type(
(const char*)strKey,(const char*)strVal
));
}
break;
//
//rs.MoveNext();
}
return TRUE;
}
BOOL CMYSQLRecordset::IsNumericField(const long lFieldIndex, BOOL &bIsNumericField)
{
bIsNumericField=FALSE;
if(lFieldIndex<0)
{
return FALSE;
}
if(lFieldIndex>=m_MySQLFieldList.size())
{
return FALSE;
}
MYSQL_FIELD* pField=&m_MySQLFieldList[lFieldIndex];
bIsNumericField=IS_NUM_FIELD(pField);
return TRUE;
}
void CMYSQLRecordset::SetDatabase(CMySQLDatabase *pDatabase)
{
m_pDatabase=pDatabase;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -