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

📄 adopack.cpp

📁 ADO封装类
💻 CPP
📖 第 1 页 / 共 4 页
字号:
	}



	/************************************************************************/
	/* CADOCommand
	/************************************************************************/
	CADOCommand::CADOCommand(CADOConnection* pDB, CString strCommandText, int nCommandType)
	{
		m_nRecordsAffected = 0;
		m_strCommandText = strCommandText;
		m_nCommandType = nCommandType;

		m_pCommand = NULL;
		m_pCommand.CreateInstance(__uuidof(Command));
		m_pCommand->CommandText = m_strCommandText.AllocSysString();
		m_pCommand->CommandType = (CommandTypeEnum)m_nCommandType;
		m_pCommand->ActiveConnection = pDB->GetActiveConnection();	
	}
	CADOCommand::~CADOCommand()
	{
		m_pCommand.Release();
		m_pCommand = NULL;
		m_strCommandText = _T("");
	}

	BOOL CADOCommand::AddParameter(CADOParameter* pAdoParameter)
	{
		ASSERT(pAdoParameter->GetParameter() != NULL);

		try
		{
			m_pCommand->Parameters->Append(pAdoParameter->GetParameter());
			return TRUE;
		}
		catch(_com_error& e)
		{
			DumpComError(e);
			return FALSE;
		}
	}

	BOOL CADOCommand::AddParameter(CString strName, int nType, int nDirection, long lSize, int nValue)
	{

		_variant_t vtValue;

		vtValue.vt = VT_I2;
		vtValue.iVal = nValue;

		return AddParameter(strName, nType, nDirection, lSize, vtValue);
	}

	BOOL CADOCommand::AddParameter(CString strName, int nType, int nDirection, long lSize, long lValue)
	{

		_variant_t vtValue;

		vtValue.vt = VT_I4;
		vtValue.lVal = lValue;

		return AddParameter(strName, nType, nDirection, lSize, vtValue);
	}

	BOOL CADOCommand::AddParameter(CString strName, int nType, int nDirection, long lSize, double dblValue, int nPrecision, int nScale)
	{

		_variant_t vtValue;

		vtValue.vt = VT_R8;
		vtValue.dblVal = dblValue;

		return AddParameter(strName, nType, nDirection, lSize, vtValue, nPrecision, nScale);
	}

	BOOL CADOCommand::AddParameter(CString strName, int nType, int nDirection, long lSize, CString strValue)
	{

		_variant_t vtValue;

		vtValue.vt = VT_BSTR;
		vtValue.bstrVal = strValue.AllocSysString();

		return AddParameter(strName, nType, nDirection, lSize, vtValue);
	}

	BOOL CADOCommand::AddParameter(CString strName, int nType, int nDirection, long lSize, COleDateTime time)
	{

		_variant_t vtValue;

		vtValue.vt = VT_DATE;
		vtValue.date = time;

		return AddParameter(strName, nType, nDirection, lSize, vtValue);
	}


	BOOL CADOCommand::AddParameter(CString strName, int nType, int nDirection, long lSize, _variant_t vtValue, int nPrecision, int nScale)
	{
		try
		{
			_ParameterPtr pParam = m_pCommand->CreateParameter(strName.AllocSysString(), (DataTypeEnum)nType, (ParameterDirectionEnum)nDirection, lSize, vtValue);
			pParam->PutPrecision(nPrecision);
			pParam->PutNumericScale(nScale);
			m_pCommand->Parameters->Append(pParam);

			return TRUE;
		}
		catch(_com_error& e)
		{
			DumpComError(e);
			return FALSE;
		}
	}


	void CADOCommand::SetText(CString strCommandText)
	{
		ASSERT(!strCommandText.IsEmpty());

		m_strCommandText = strCommandText;
		m_pCommand->CommandText = m_strCommandText.AllocSysString();
	}

	void CADOCommand::SetType(int nCommandType)
	{
		m_nCommandType = nCommandType;
		m_pCommand->CommandType = (CommandTypeEnum)m_nCommandType;
	}

	BOOL CADOCommand::Execute()
	{
		_variant_t vRecords;
		m_nRecordsAffected = 0;
		try
		{
			m_pCommand->Execute(&vRecords, NULL, adCmdStoredProc);
			m_nRecordsAffected = vRecords.iVal;
			return TRUE;
		}
		catch(_com_error &e)
		{
			DumpComError(e);
			return FALSE;
		}
	}





	/************************************************************************/
	/* CADOParameter
	/************************************************************************/
	CADOParameter::CADOParameter(int nType, long lSize, int nDirection, CString strName)
	{
		m_strName = strName;
		m_nType = nType;

		m_pParameter = NULL;
		m_pParameter.CreateInstance(__uuidof(Parameter));
		m_pParameter->Direction = (ParameterDirectionEnum)nDirection;
		m_pParameter->Name = m_strName.AllocSysString();
		m_pParameter->Type = (DataTypeEnum)nType;
		m_pParameter->Size = lSize;
	}
	CADOParameter::~CADOParameter()
	{
		m_pParameter.Release();
		m_pParameter = NULL;
		m_strName = _T("");
	}
	BOOL CADOParameter::SetValue(int nValue)
	{
		_variant_t vtVal;

		ASSERT(m_pParameter != NULL);

		vtVal.vt = VT_I2;
		vtVal.iVal = nValue;

		try
		{
			if(m_pParameter->Size == 0)
				m_pParameter->Size = sizeof(int);

			m_pParameter->Value = vtVal;
			return TRUE;
		}
		catch(_com_error &e)
		{
			DumpComError(e);
			return FALSE;
		}
	}


	BOOL CADOParameter::SetValue(long lValue)
	{
		_variant_t vtVal;

		ASSERT(m_pParameter != NULL);

		vtVal.vt = VT_I4;
		vtVal.lVal = lValue;

		try
		{
			if(m_pParameter->Size == 0)
				m_pParameter->Size = sizeof(long);

			m_pParameter->Value = vtVal;
			return TRUE;
		}
		catch(_com_error &e)
		{
			DumpComError(e);
			return FALSE;
		}
	}

	BOOL CADOParameter::SetValue(double dblValue)
	{
		_variant_t vtVal;

		ASSERT(m_pParameter != NULL);

		vtVal.vt = VT_R8;
		vtVal.dblVal = dblValue;

		try
		{
			if(m_pParameter->Size == 0)
				m_pParameter->Size = sizeof(double);

			m_pParameter->Value = vtVal;
			return TRUE;
		}
		catch(_com_error &e)
		{
			DumpComError(e);
			return FALSE;
		}
	}

	BOOL CADOParameter::SetValue(CString strValue)
	{
		_variant_t vtVal;

		ASSERT(m_pParameter != NULL);

		if(!strValue.IsEmpty())
			vtVal.vt = VT_BSTR;
		else
			vtVal.vt = VT_NULL;

		vtVal.bstrVal = strValue.AllocSysString();

		try
		{
			if(m_pParameter->Size == 0)
				m_pParameter->Size = sizeof(char) * strValue.GetLength();

			m_pParameter->Value = vtVal;
			return TRUE;
		}
		catch(_com_error &e)
		{
			DumpComError(e);
			return FALSE;
		}
	}

	BOOL CADOParameter::SetValue(COleDateTime time)
	{
		_variant_t vtVal;

		ASSERT(m_pParameter != NULL);

		vtVal.vt = VT_DATE;
		vtVal.date = time;

		try
		{
			if(m_pParameter->Size == 0)
				m_pParameter->Size = sizeof(DATE);

			m_pParameter->Value = vtVal;
			return TRUE;
		}
		catch(_com_error &e)
		{
			DumpComError(e);
			return FALSE;
		}
	}

	BOOL CADOParameter::SetValue(_variant_t vtValue)
	{

		ASSERT(m_pParameter != NULL);

		try
		{
			if(m_pParameter->Size == 0)
				m_pParameter->Size = sizeof(VARIANT);

			m_pParameter->Value = vtValue;
			return TRUE;
		}
		catch(_com_error &e)
		{
			DumpComError(e);
			return FALSE;
		}
	}

	BOOL CADOParameter::GetValue(int& nValue)
	{
		_variant_t vtVal;
		int nVal = 0;

		try
		{
			vtVal = m_pParameter->Value;

			switch(vtVal.vt)
			{
			case VT_BOOL:
				nVal = vtVal.boolVal;
				break;
			case VT_I2:
			case VT_UI1:
				nVal = vtVal.iVal;
				break;
			case VT_INT:
				nVal = vtVal.intVal;
				break;
			case VT_NULL:
			case VT_EMPTY:
				nVal = 0;
				break;
			default:
				nVal = vtVal.iVal;
			}	
			nValue = nVal;
			return TRUE;
		}
		catch(_com_error& e)
		{
			DumpComError(e);
			return FALSE;
		}
	}

	BOOL CADOParameter::GetValue(long& lValue)
	{
		_variant_t vtVal;
		long lVal = 0;

		try
		{
			vtVal = m_pParameter->Value;
			if(vtVal.vt != VT_NULL && vtVal.vt != VT_EMPTY)
				lVal = vtVal.lVal;
			lValue = lVal;
			return TRUE;
		}
		catch(_com_error& e)
		{
			DumpComError(e);
			return FALSE;
		}
	}

	BOOL CADOParameter::GetValue(double& dbValue)
	{
		_variant_t vtVal;
		double dblVal;
		try
		{
			vtVal = m_pParameter->Value;
			switch(vtVal.vt)
			{
			case VT_R4:
				dblVal = vtVal.fltVal;
				break;
			case VT_R8:
				dblVal = vtVal.dblVal;
				break;
			case VT_DECIMAL:
				//Corrected by Jos?Carlos Mart韓ez Gal醤
				dblVal = vtVal.decVal.Lo32;
				dblVal *= (vtVal.decVal.sign == 128)? -1 : 1;
				dblVal /= pow(10, vtVal.decVal.scale); 
				break;
			case VT_UI1:
				dblVal = vtVal.iVal;
				break;
			case VT_I2:
			case VT_I4:
				dblVal = vtVal.lVal;
				break;
			case VT_INT:
				dblVal = vtVal.intVal;
				break;
			case VT_NULL:
			case VT_EMPTY:
				dblVal = 0;
				break;
			default:
				dblVal = 0;
			}
			dbValue = dblVal;
			return TRUE;
		}
		catch(_com_error& e)
		{
			DumpComError(e);
			return FALSE;
		}
	}

	BOOL CADOParameter::GetValue(CString& strValue, CString strDateFormat)
	{
		_variant_t vtVal;
		CString strVal = _T("");

		try
		{
			vtVal = m_pParameter->Value;
			switch(vtVal.vt) 
			{
			case VT_R4:
				strVal = DblToStr(vtVal.fltVal);
				break;
			case VT_R8:
				strVal = DblToStr(vtVal.dblVal);
				break;
			case VT_BSTR:
				strVal = vtVal.bstrVal;
				break;
			case VT_I2:
			case VT_UI1:
				strVal = IntToStr(vtVal.iVal);
				break;
			case VT_INT:
				strVal = IntToStr(vtVal.intVal);
				break;
			case VT_I4:
				strVal = LongToStr(vtVal.lVal);
				break;
			case VT_DECIMAL:
				{
					double val = vtVal.decVal.Lo32;
					val *= (vtVal.decVal.sign == 128)? -1 : 1;
					val /= pow(10, vtVal.decVal.scale); 
					strVal = DblToStr(val);
				}
				break;
			case VT_DATE:
				{
					COleDateTime dt(vtVal);

					if(strDateFormat.IsEmpty())
						strDateFormat = _T("%Y-%m-%d %H:%M:%S");
					strVal = dt.Format(strDateFormat);
				}
				break;
			case VT_EMPTY:
			case VT_NULL:
				strVal.Empty();
				break;
			default:
				strVal.Empty();
				return FALSE;
			}
			strValue = strVal;
			return TRUE;
		}
		catch(_com_error& e)
		{
			DumpComError(e);
			return FALSE;
		}
	}

	BOOL CADOParameter::GetValue(COleDateTime& time)
	{
		_variant_t vtVal;

		try
		{
			vtVal = m_pParameter->Value;
			switch(vtVal.vt) 
			{
			case VT_DATE:
				{
					COleDateTime dt(vtVal);
					time = dt;
				}
				break;
			case VT_EMPTY:
			case VT_NULL:
				time.SetStatus(COleDateTime::null);
				break;
			default:
				return FALSE;
			}
			return TRUE;
		}
		catch(_com_error& e)
		{
			DumpComError(e);
			return FALSE;
		}
	}

	BOOL CADOParameter::GetValue(_variant_t& vtValue)
	{
		try
		{
			vtValue = m_pParameter->Value;
			return TRUE;
		}
		catch(_com_error& e)
		{
			DumpComError(e);
			return FALSE;
		}
	}





	/************************************************************************/
	/* 全局函数
	/************************************************************************/
	CString IntToStr(int nVal)
	{
		CString strRet;
		strRet.Format("%d", nVal);
		return strRet;
	}

	CString LongToStr(long lVal)
	{
		CString strRet;
		strRet.Format("%ld", lVal);
		return strRet;
	}

	CString ULongToStr(unsigned long ulVal)
	{
		CString strRet;
		char buff[20];
		ultoa(ulVal, buff, 10);
		strRet = buff;
		return strRet;
	}


	CString DblToStr(double dblVal, int ndigits)
	{
		CString strRet;
		char buff[50];
		_gcvt(dblVal, ndigits, buff);
		strRet = buff;
		return strRet;
	}

	CString DblToStr(float fltVal)
	{
		CString strRet = _T("");
		char buff[50];
		_gcvt(fltVal, 10, buff);
		strRet = buff;
		return strRet;
	}


	void DumpComError(_com_error &e)
	{
		char strComError[256];	
		sprintf(strComError,"错误编号: %08lx\n错误信息: %s\n错误源  : %s\n错误描述: %s",
			e.Error(),	e.ErrorMessage(),	(LPCSTR) e.Source(),	(LPCSTR) e.Description()); 
		::MessageBox(NULL,strComError,"错误",MB_ICONEXCLAMATION);	
	}


	/************************************************************************/
	/* CJetEngine
	/************************************************************************/
	BOOL CJetEngine::CCompactDatabase(CString strDatabaseSource, CString strDatabaseDestination)
	{
		try
		{
			::CoInitialize(NULL);
			IJetEnginePtr jet(__uuidof(JetEngine));		
			HRESULT hr = jet->CompactDatabase(_bstr_t(strDatabaseSource.GetBuffer(0)), _bstr_t(strDatabaseDestination.GetBuffer(0)));
			::CoUninitialize();
			return hr == S_OK;
		}
		catch(_com_error &e) 
		{
			UNUSED_ALWAYS(e);
			::CoUninitialize();
			return FALSE;
		} 
	}


}

⌨️ 快捷键说明

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