mydatabase.cpp

来自「老外写的一个很不错的数据库操作类,用起来很方便,写法也很规范,可以做为学习的范例」· C++ 代码 · 共 490 行 · 第 1/2 页

CPP
490
字号
				ASSERT(FALSE);
				retcode = -1;
				break;
		}
		if(retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO)
		{
			SQLCHAR	SqlState[6],Msg[SQL_MAX_MESSAGE_LENGTH];
			SQLINTEGER	NativeError;
			SQLSMALLINT	n,MsgLen;
			SQLRETURN retcode2;
			n = 1;
			CString strMsg;
			while ((retcode2 = SQLGetDiagRec(SQL_HANDLE_STMT, hstmt, n, SqlState, &NativeError,Msg, sizeof(Msg), &MsgLen)) != SQL_NO_DATA) 
			{
				strMsg=Msg;
				AfxMessageBox(strMsg);
				n++;
			}
			return;
		}
	}
}

/*
	The following functions set data for each input parameter,
	or get data from each output parameter.
	There is no tranformation between different types,
	so the data type and the parameter type must be equal.
*/

void	CMyDatabase::SetParam_Bool(UINT nParamId,bool bParamValue)
{
	ASSERT(nParamId>=0);
	ASSERT(nParamId<m_nParams);
	if(m_mapParam[nParamId].m_nDataType != SQL_BIT)
	{
		ASSERT(FALSE);
		return;
	}
	if(m_mapParam[nParamId].m_nColType != SQL_PARAM_INPUT && m_mapParam[nParamId].m_nColType != SQL_PARAM_INPUT_OUTPUT)
		ASSERT(FALSE);

	m_mapParam[nParamId].m_bVal = bParamValue;
}

void	CMyDatabase::SetParam_Char(UINT nParamId,char chParamValue)
{
	ASSERT(nParamId>=0);
	ASSERT(nParamId<m_nParams);
	if(m_mapParam[nParamId].m_nDataType != SQL_TINYINT)
	{
		ASSERT(FALSE);
		return;
	}
	if(m_mapParam[nParamId].m_nColType != SQL_PARAM_INPUT && m_mapParam[nParamId].m_nColType != SQL_PARAM_INPUT_OUTPUT)
		ASSERT(FALSE);
	m_mapParam[nParamId].m_chVal = chParamValue;
}

void	CMyDatabase::SetParam_Short(UINT nParamId,short iParamValue)
{
	ASSERT(nParamId>=0);
	ASSERT(nParamId<m_nParams);
	if(m_mapParam[nParamId].m_nDataType != SQL_SMALLINT)
	{
		ASSERT(FALSE);
		return;
	}
	if(m_mapParam[nParamId].m_nColType != SQL_PARAM_INPUT && m_mapParam[nParamId].m_nColType != SQL_PARAM_INPUT_OUTPUT)
		ASSERT(FALSE);
	m_mapParam[nParamId].m_iVal = iParamValue;
}

void	CMyDatabase::SetParam_Long(UINT nParamId,long nParamValue)
{
	ASSERT(nParamId>=0);
	ASSERT(nParamId<m_nParams);
	if(m_mapParam[nParamId].m_nDataType != SQL_INTEGER)
	{
		ASSERT(FALSE);
		return;
	}
	if(m_mapParam[nParamId].m_nColType != SQL_PARAM_INPUT && m_mapParam[nParamId].m_nColType != SQL_PARAM_INPUT_OUTPUT)
		ASSERT(FALSE);
	m_mapParam[nParamId].m_lVal = nParamValue;
}

void	CMyDatabase::SetParam_Float(UINT nParamId,float fltParamValue)
{
	ASSERT(nParamId>=0);
	ASSERT(nParamId<m_nParams);
	if(m_mapParam[nParamId].m_nDataType != SQL_REAL)
	{
		ASSERT(FALSE);
		return;
	}
	if(m_mapParam[nParamId].m_nColType != SQL_PARAM_INPUT && m_mapParam[nParamId].m_nColType != SQL_PARAM_INPUT_OUTPUT)
		ASSERT(FALSE);
	m_mapParam[nParamId].m_fltVal = fltParamValue;
}

void	CMyDatabase::SetParam_Double(UINT nParamId,double dblParamValue)
{
	ASSERT(nParamId>=0);
	ASSERT(nParamId<m_nParams);
	if(m_mapParam[nParamId].m_nDataType != SQL_DOUBLE && m_mapParam[nParamId].m_nDataType != SQL_DECIMAL
		&& m_mapParam[nParamId].m_nDataType != SQL_NUMERIC && m_mapParam[nParamId].m_nDataType != SQL_FLOAT)
	{
		ASSERT(FALSE);
		return;
	}
	if(m_mapParam[nParamId].m_nColType != SQL_PARAM_INPUT && m_mapParam[nParamId].m_nColType != SQL_PARAM_INPUT_OUTPUT)
		ASSERT(FALSE);
	m_mapParam[nParamId].m_dblVal = dblParamValue;
}

void	CMyDatabase::SetParam_DateTime(UINT nParamId,TIMESTAMP_STRUCT dtParamValue)
{
	ASSERT(nParamId>=0);
	ASSERT(nParamId<m_nParams);
	if(m_mapParam[nParamId].m_nDataType != SQL_TIMESTAMP && m_mapParam[nParamId].m_nDataType != SQL_TYPE_TIMESTAMP
		&& m_mapParam[nParamId].m_nDataType != SQL_DATE && m_mapParam[nParamId].m_nDataType != SQL_TYPE_DATE)
	{
		ASSERT(FALSE);
		return;
	}
	if(m_mapParam[nParamId].m_nColType != SQL_PARAM_INPUT && m_mapParam[nParamId].m_nColType != SQL_PARAM_INPUT_OUTPUT)
		ASSERT(FALSE);
	m_mapParam[nParamId].m_dtVal.year = dtParamValue.year;
	m_mapParam[nParamId].m_dtVal.month = dtParamValue.month;
	m_mapParam[nParamId].m_dtVal.day = dtParamValue.day;
	m_mapParam[nParamId].m_dtVal.hour = dtParamValue.hour;
	m_mapParam[nParamId].m_dtVal.minute = dtParamValue.minute;
	m_mapParam[nParamId].m_dtVal.second = dtParamValue.second;
	m_mapParam[nParamId].m_dtVal.fraction = dtParamValue.fraction;
}

void	CMyDatabase::SetParam_String(UINT nParamId,CString strParamValue)
{
	ASSERT(nParamId>=0);
	ASSERT(nParamId<m_nParams);
	if(m_mapParam[nParamId].m_nDataType != SQL_CHAR && m_mapParam[nParamId].m_nDataType != SQL_VARCHAR
		&& m_mapParam[nParamId].m_nDataType != SQL_WCHAR && m_mapParam[nParamId].m_nDataType != SQL_WVARCHAR)
	{
		ASSERT(FALSE);
		return;
	}
	if(m_mapParam[nParamId].m_nColType != SQL_PARAM_INPUT && m_mapParam[nParamId].m_nColType != SQL_PARAM_INPUT_OUTPUT)
		ASSERT(FALSE);
	m_mapParam[nParamId].m_strVal = strParamValue;
}

bool	CMyDatabase::GetParam_Bool(UINT nParamId)
{
	ASSERT(nParamId>=0);
	ASSERT(nParamId<m_nParams);
	if(m_mapParam[nParamId].m_nDataType != SQL_BIT)
	{
		ASSERT(FALSE);
	}
	if(m_mapParam[nParamId].m_nColType != SQL_PARAM_OUTPUT && m_mapParam[nParamId].m_nColType != SQL_PARAM_INPUT_OUTPUT)
		ASSERT(FALSE);
	return m_mapParam[nParamId].m_bVal;
}

char	CMyDatabase::GetParam_Char(UINT nParamId)
{
	ASSERT(nParamId>=0);
	ASSERT(nParamId<m_nParams);
	if(m_mapParam[nParamId].m_nDataType != SQL_TINYINT)
	{
		ASSERT(FALSE);
	}
	if(m_mapParam[nParamId].m_nColType != SQL_PARAM_OUTPUT && m_mapParam[nParamId].m_nColType != SQL_PARAM_INPUT_OUTPUT)
		ASSERT(FALSE);
	return m_mapParam[nParamId].m_chVal;
}

short	CMyDatabase::GetParam_Short(UINT nParamId)
{
	ASSERT(nParamId>=0);
	ASSERT(nParamId<m_nParams);
	if(m_mapParam[nParamId].m_nDataType != SQL_SMALLINT)
	{
		ASSERT(FALSE);
	}
	if(m_mapParam[nParamId].m_nColType != SQL_PARAM_OUTPUT && m_mapParam[nParamId].m_nColType != SQL_PARAM_INPUT_OUTPUT)
		ASSERT(FALSE);
	return m_mapParam[nParamId].m_iVal;
}

long	CMyDatabase::GetParam_Long(UINT nParamId)
{
	ASSERT(nParamId>=0);
	ASSERT(nParamId<m_nParams);
	if(m_mapParam[nParamId].m_nDataType != SQL_INTEGER)
	{
		ASSERT(FALSE);
	}
	if(m_mapParam[nParamId].m_nColType != SQL_PARAM_OUTPUT && m_mapParam[nParamId].m_nColType != SQL_PARAM_INPUT_OUTPUT)
		ASSERT(FALSE);
	return m_mapParam[nParamId].m_lVal;
}

float	CMyDatabase::GetParam_Float(UINT nParamId)
{
	ASSERT(nParamId>=0);
	ASSERT(nParamId<m_nParams);
	if(m_mapParam[nParamId].m_nDataType != SQL_REAL)
	{
		ASSERT(FALSE);
	}
	if(m_mapParam[nParamId].m_nColType != SQL_PARAM_OUTPUT && m_mapParam[nParamId].m_nColType != SQL_PARAM_INPUT_OUTPUT)
		ASSERT(FALSE);
	return m_mapParam[nParamId].m_fltVal;
}

double	CMyDatabase::GetParam_Double(UINT nParamId)
{
	ASSERT(nParamId>=0);
	ASSERT(nParamId<m_nParams);
	if(m_mapParam[nParamId].m_nDataType != SQL_DOUBLE && m_mapParam[nParamId].m_nDataType != SQL_DECIMAL
		&& m_mapParam[nParamId].m_nDataType != SQL_NUMERIC && m_mapParam[nParamId].m_nDataType != SQL_FLOAT)
	{
		ASSERT(FALSE);
	}
	if(m_mapParam[nParamId].m_nColType != SQL_PARAM_OUTPUT && m_mapParam[nParamId].m_nColType != SQL_PARAM_INPUT_OUTPUT)
		ASSERT(FALSE);
	return m_mapParam[nParamId].m_dblVal;
}

TIMESTAMP_STRUCT	CMyDatabase::GetParam_DateTime(UINT nParamId)
{
	ASSERT(nParamId>=0);
	ASSERT(nParamId<m_nParams);
	if(m_mapParam[nParamId].m_nDataType != SQL_TIMESTAMP && m_mapParam[nParamId].m_nDataType != SQL_TYPE_TIMESTAMP
		&& m_mapParam[nParamId].m_nDataType != SQL_DATE && m_mapParam[nParamId].m_nDataType != SQL_TYPE_DATE)
	{
		ASSERT(FALSE);
	}
	if(m_mapParam[nParamId].m_nColType != SQL_PARAM_OUTPUT && m_mapParam[nParamId].m_nColType != SQL_PARAM_INPUT_OUTPUT)
		ASSERT(FALSE);
	return m_mapParam[nParamId].m_dtVal;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?