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

📄 mysqlrecordset.cpp

📁 SQLBig5BugTool 宽字符操作问题
💻 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 + -