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

📄 clsadooperater.cpp

📁 Oracle OCI 应用
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		ccvar.Detach(pszFieldName);
		ccvar.Clear();
	} 
	catch (const db::SqlException &e) 
	{
//		//置数据库状态为Off
//		g_dbStatProbe.SetOff(m_strDSN);
//
		//释放ICallableStatement
		g_pStmt->Close();
		//释放连接
		g_pConn->Close();

		CComVariant ccvar;
		ccvar = "";
		ccvar.Detach(pszFieldName);
		ccvar.Clear();

		ccvar = "";
		ccvar.Detach(pszFieldValue);
		ccvar.Clear();
		
		::SysFreeString(szMainID);
		::SysFreeString(szFromIndex);
		::SysFreeString(szLength);
		return S_FALSE;
	}

	::SysFreeString(szMainID);
	::SysFreeString(szFromIndex);
	::SysFreeString(szLength);

	//释放ICallableStatement
	g_pStmt->Close();
	//释放连接
	g_pConn->Close();
	return S_OK;
}

STDMETHODIMP CClsAdoOperater::PKInsertLog(BSTR szWorkID, BSTR szCallPhone, BSTR szBusiPhone, BSTR szPhoneXh, BSTR szWorkType, BSTR szFlm, BSTR szKeyWords, BSTR szOtherInfo, VARIANT *plRet)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState())

	std::string m_strProcedureName = "PK_query.insertlog";
	db::ParamStruct m_parameters[9];
	int iParaCount = 9;

	//话务员工号
	SetParaContent(m_parameters[0],db::PT_IN,
					_com_util::ConvertBSTRToString(szWorkID),db::DT_STRING,"");
	//主叫号码
	SetParaContent(m_parameters[1],db::PT_IN,
					_com_util::ConvertBSTRToString(szCallPhone),db::DT_STRING,"");
	//被叫号码
	SetParaContent(m_parameters[2],db::PT_IN,
					_com_util::ConvertBSTRToString(szBusiPhone),db::DT_STRING,"");
	//被叫号码序号
	SetParaContent(m_parameters[3],db::PT_IN,
					_com_util::ConvertBSTRToString(szPhoneXh),db::DT_STRING,"");
	//报号类型
	SetParaContent(m_parameters[4],db::PT_IN,
					_com_util::ConvertBSTRToString(szWorkType),db::DT_STRING,"");
	//分类码
	SetParaContent(m_parameters[5],db::PT_IN,
					_com_util::ConvertBSTRToString(szFlm),db::DT_STRING,"");
	//关键词信息
	SetParaContent(m_parameters[6],db::PT_IN,
					_com_util::ConvertBSTRToString(szKeyWords),db::DT_STRING,"");
	//备注1
	SetParaContent(m_parameters[7],db::PT_IN,
					_com_util::ConvertBSTRToString(szOtherInfo),db::DT_STRING,"");
	//返回结果1=成功;0=失败;
	SetParaContent(m_parameters[8],db::PT_OUT,"",db::DT_INT,"");
	
	// 2. 产生执行存储过程的sql语句
	std::string sql = g_DbDriver->GenStoredProcedureSql(m_strProcedureName,iParaCount);

	// 3. 编译sql
	try 
	{
		g_pStmt = g_pConn->PrepareCall(sql);
	} 
	catch (const db::SqlException &e) 
	{
//		//置数据库状态为Off
//		//g_dbStatProbe.SetOff(m_strDSN);
//
		//释放连接
		g_pConn->Close();

		CComVariant ccvar;
		ccvar = "-1";
		ccvar.Detach(plRet);
		ccvar.Clear();

		::SysFreeString(szWorkID);
		::SysFreeString(szCallPhone);
		::SysFreeString(szBusiPhone);
		::SysFreeString(szPhoneXh);
		::SysFreeString(szWorkType);
		::SysFreeString(szFlm);
		::SysFreeString(szKeyWords);
		::SysFreeString(szOtherInfo);

		return S_FALSE;
	}

	// 4. 设置输入参数并注册输出参数
	try 
	{
		SetInputAndRegOuput(g_pStmt,m_parameters,iParaCount);
	} 
	catch (const db::SqlException &e) 
	{
		//置数据库状态为Off
//		g_dbStatProbe.SetOff(m_strDSN);
//
		//释放ICallableStatement
		g_pStmt->Close();
		//释放连接
		g_pConn->Close();

		CComVariant ccvar;
		ccvar = "-1";
		ccvar.Detach(plRet);
		ccvar.Clear();

		::SysFreeString(szWorkID);
		::SysFreeString(szCallPhone);
		::SysFreeString(szBusiPhone);
		::SysFreeString(szPhoneXh);
		::SysFreeString(szWorkType);
		::SysFreeString(szFlm);
		::SysFreeString(szKeyWords);
		::SysFreeString(szOtherInfo);

		return S_FALSE;
	}

	// 5. execute
	try 
	{
		g_pStmt->Execute();
	} 
	catch (const db::SqlException &e) 
	{
//		//置数据库状态为Off
//		g_dbStatProbe.SetOff(m_strDSN);
//
		//释放ICallableStatement
		g_pStmt->Close();
		//释放连接
		g_pConn->Close();

		CComVariant ccvar;
		ccvar = "-1";
		ccvar.Detach(plRet);
		ccvar.Clear();

		::SysFreeString(szWorkID);
		::SysFreeString(szCallPhone);
		::SysFreeString(szBusiPhone);
		::SysFreeString(szPhoneXh);
		::SysFreeString(szWorkType);
		::SysFreeString(szFlm);
		::SysFreeString(szKeyWords);
		::SysFreeString(szOtherInfo);

		return S_FALSE;
	}

	CComVariant ccvar;
	// 6. 取输出参数
	try 
	{
		GetProcResult(g_pStmt,m_parameters,iParaCount);
		ccvar = m_parameters[8].paramValue.c_str();
		ccvar.Detach(plRet);
		ccvar.Clear();
	} 
	catch (const db::SqlException &e) 
	{
//		//置数据库状态为Off
//		g_dbStatProbe.SetOff(m_strDSN);
//
		//释放ICallableStatement
		g_pStmt->Close();
		//释放连接
		g_pConn->Close();

		CComVariant ccvar;
		ccvar = "-1";
		ccvar.Detach(plRet);
		ccvar.Clear();
		
		::SysFreeString(szWorkID);
		::SysFreeString(szCallPhone);
		::SysFreeString(szBusiPhone);
		::SysFreeString(szPhoneXh);
		::SysFreeString(szWorkType);
		::SysFreeString(szFlm);
		::SysFreeString(szKeyWords);
		::SysFreeString(szOtherInfo);

		return S_FALSE;
	}

	::SysFreeString(szWorkID);
	::SysFreeString(szCallPhone);
	::SysFreeString(szBusiPhone);
	::SysFreeString(szPhoneXh);
	::SysFreeString(szWorkType);
	::SysFreeString(szFlm);
	::SysFreeString(szKeyWords);
	::SysFreeString(szOtherInfo);

	//释放ICallableStatement
	g_pStmt->Close();
	//释放连接
	g_pConn->Close();
	return S_OK;
}


void SetParameter(db::ICallableStatement * pStmt, int index,
					db::DataType type, const std::string &value) 
{
	switch(type) {
	case db::DT_STRING:
		pStmt->SetString( index, value);
		break;
	case db::DT_INT:
		pStmt->SetInt(index, atoi(value.c_str()));
		break;
	//default:
	}
}

void SetInputAndRegOuput(db::ICallableStatement * pStmt,
						 db::ParamStruct *pPara,int iParaCount)
{
	for(int i = 0; i < iParaCount; ++i) 
	{
		db::ParamStruct ps = *pPara;
		switch(ps.paramType) 
		{
		case db::PT_IN:
			SetParameter(pStmt, i + 1, ps.dataType, ps.paramValue);
			break;
		case db::PT_OUT:
			pStmt->RegisterOutParameter(i + 1, ps.dataType);
			break;
		case db::PT_IN_OUT:
			SetParameter(pStmt, i + 1, ps.dataType, ps.paramValue);
			pStmt->RegisterOutParameter(i + 1, ps.dataType);
			break;
		}

		pPara++;
	}
}

void GetProcResult(db::ICallableStatement * pStmt,
				   db::ParamStruct *pPara,int iParaCount)
{
	for(int i = 0; i < iParaCount; ++i) 
	{
		db::ParamStruct ps = *pPara;
		switch(ps.paramType) 
		{
		case db::PT_OUT:
		case db::PT_IN_OUT:
			{
				switch(ps.dataType)
				{
				case db::DT_STRING :
					if (!pStmt->GetString(i + 1, ps.paramValue))
						ps.paramValue.erase();
					
					pPara->paramValue = ps.paramValue;
					break;
				case db::DT_INT :
					int iVal;
					if (pStmt->GetInt(i + 1, iVal))
					{
						char szTmp[20];
						sprintf(szTmp, "%d", iVal);
						ps.paramValue = szTmp;

						pPara->paramValue = ps.paramValue;
					}
					else
						ps.paramValue.erase();
					break;
				case db::DT_TIMESTAMP :
					db::Timestamp ts;
					if (pStmt->GetTimestamp(i + 1, ts))
					{
						ps.paramValue = ts.ToString();
						pPara->paramValue = ps.paramValue;
					}
					else
						ps.paramValue.erase();
					break;
				}
			}
			break;
		}
		pPara++;
	}
}

void SetParaContent(db::ParamStruct &para,db::ParamType paraType,
					const std::string& strParavalue,
					db::DataType datatype,const std::string& strDataname)
{
	para.paramType	= paraType;
	para.paramValue = strParavalue;
	para.paramName	= strDataname;
	para.dataType	= datatype;
}

STDMETHODIMP CClsAdoOperater::PKGetGroup(BSTR szBhType, BSTR szTableId, 
										 BSTR szXh, BSTR szKeyWords, 
										 VARIANT *pszGroupInfo, 
										 VARIANT *plGroupNum)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState())

	std::string m_strProcedureName = "PK_query.get_group";
	db::ParamStruct m_parameters[6];
	int iParaCount = 6;
	//OCIDBDriver oci;	
	
	std::string strBhType	= _com_util::ConvertBSTRToString(szBhType);
	std::string strTableId	= _com_util::ConvertBSTRToString(szTableId);
	std::string strXh		= _com_util::ConvertBSTRToString(szXh);
	std::string strKeyWords = _com_util::ConvertBSTRToString(szKeyWords);
	//[in]报号类型
	SetParaContent(m_parameters[0],db::PT_IN,strBhType,db::DT_STRING,"");
	//[in]表名标示
	SetParaContent(m_parameters[1],db::PT_IN,strTableId,db::DT_STRING,"");
	//[in]序号
	SetParaContent(m_parameters[2],db::PT_IN,strXh,db::DT_STRING,"");
	//[in]关键词
	SetParaContent(m_parameters[3],db::PT_IN,strKeyWords,db::DT_STRING,"");
	//[out]组信息(多家多组,包括每家的序号,和其业务标志)
	SetParaContent(m_parameters[4],db::PT_OUT,"",db::DT_STRING,"");
	//[out]组个数
	SetParaContent(m_parameters[5],db::PT_OUT,"",db::DT_STRING,"");

	// 2. 产生执行存储过程的sql语句
	std::string	sql = g_DbDriver->GenStoredProcedureSql(m_strProcedureName,iParaCount);

	// 3. 编译sql
	try 
	{
		g_pStmt = g_pConn->PrepareCall(sql);
	} 
	catch (const db::SqlException &e) 
	{
//		//置数据库状态为Off
//		//g_dbStatProbe.SetOff(m_strDSN);
//
		//释放连接
		g_pConn->Close();

		CComVariant ccvar;
		ccvar = "";
		ccvar.Detach(pszGroupInfo);
		ccvar.Clear();

		ccvar = "-1";
		ccvar.Detach(plGroupNum);
		ccvar.Clear();

		::SysFreeString(szBhType);
		::SysFreeString(szTableId);
		::SysFreeString(szXh);
		::SysFreeString(szKeyWords);

		return S_FALSE;
	}

	// 4. 设置输入参数并注册输出参数
	try 
	{
		SetInputAndRegOuput(g_pStmt,m_parameters,iParaCount);
	} 
	catch (const db::SqlException &e) 
	{
		//置数据库状态为Off
//		g_dbStatProbe.SetOff(m_strDSN);
//
		//释放ICallableStatement
		g_pStmt->Close();
		//释放连接
		g_pConn->Close();

		CComVariant ccvar;
		ccvar = "";
		ccvar.Detach(pszGroupInfo);
		ccvar.Clear();

		ccvar = "-2";
		ccvar.Detach(plGroupNum);
		ccvar.Clear();

		::SysFreeString(szBhType);
		::SysFreeString(szTableId);
		::SysFreeString(szXh);
		::SysFreeString(szKeyWords);

		return S_FALSE;
	}

	// 5. execute
	try 
	{
		g_pStmt->Execute();
	} 
	catch (const db::SqlException &e) 
	{
//		//置数据库状态为Off
//		g_dbStatProbe.SetOff(m_strDSN);
//
		//释放ICallableStatement
		g_pStmt->Close();
		//释放连接
		g_pConn->Close();

		CComVariant ccvar;
		//ccvar = "";
		ccvar = e.GetDescription().c_str();
		ccvar.Detach(pszGroupInfo);
		ccvar.Clear();

		ccvar = "-3";
		ccvar.Detach(plGroupNum);
		ccvar.Clear();
		
		::SysFreeString(szBhType);
		::SysFreeString(szTableId);
		::SysFreeString(szXh);
		::SysFreeString(szKeyWords);

		return S_FALSE;
	}

	// 6. 取输出参数
	try 
	{
		GetProcResult(g_pStmt,m_parameters,iParaCount);

		CComVariant ccvar;

		ccvar = m_parameters[4].paramValue.c_str();
		ccvar.Detach(pszGroupInfo);
		ccvar.Clear();

		ccvar = m_parameters[5].paramValue.c_str();
		ccvar.Detach(plGroupNum);
		ccvar.Clear();
	} 
	catch (const db::SqlException &e) 
	{
//		//置数据库状态为Off
//		g_dbStatProbe.SetOff(m_strDSN);
//
		//释放ICallableStatement
		g_pStmt->Close();
		//释放连接
		g_pConn->Close();

		CComVariant ccvar;
		ccvar = "";
		ccvar.Detach(pszGroupInfo);
		ccvar.Clear();

		ccvar = "-4";
		ccvar.Detach(plGroupNum);
		ccvar.Clear();
		
		::SysFreeString(szBhType);
		::SysFreeString(szTableId);
		::SysFreeString(szXh);
		::SysFreeString(szKeyWords);
		return S_FALSE;
	}

	::SysFreeString(szBhType);
	::SysFreeString(szTableId);
	::SysFreeString(szXh);
	::SysFreeString(szKeyWords);

	//释放ICallableStatement
	g_pStmt->Close();
	//释放连接
	g_pConn->Close();

	return S_OK;
}

⌨️ 快捷键说明

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