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

📄 clsadooperater.cpp

📁 Oracle OCI 应用
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// ClsAdoOperater.cpp : Implementation of CClsAdoOperater
#include "stdafx.h"
#include "OracleCom.h"
#include "ClsAdoOperater.h"
#include <comutil.h>
#include "../include/AbstractDBDriver.h"
#include "../include/OCIDBDriver.h"
#include "../include/IConnection.h"
/////////////////////////////////////////////////////////////////////////////
// CClsAdoOperater
db::AbstractDBDriver * g_DbDriver;
db::IConnection * g_pConn;
db::ICallableStatement * g_pStmt;

void SetParaContent(db::ParamStruct &para,db::ParamType paraType,const std::string& strParavalue,
					db::DataType datatype,const std::string& strDataname);

void GetProcResult(db::ICallableStatement * pStmt,
				   db::ParamStruct *pPara,int iParaCount);

void SetInputAndRegOuput(db::ICallableStatement * pStmt,
						 db::ParamStruct *pPara,int iParaCount);

STDMETHODIMP CClsAdoOperater::InitConnect(BSTR szDsnInfo, BOOL bFlag)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState())

	g_DbDriver = new OCIDBDriver;

	g_DbDriver->Init("oracle");

	std::string strDsnInfo;

	strDsnInfo = _com_util::ConvertBSTRToString(szDsnInfo);

	std::string strDsn;
	std::string strUser;
	std::string strPwd;

	int iPosFirst = 0;
	int iPosEnd = 0;

	iPosFirst = strDsnInfo.find("dsn=");
	if(iPosFirst != std::string::npos)
	{
		iPosEnd = strDsnInfo.find(";",iPosFirst);
		if(iPosEnd != std::string::npos)
			strDsn = strDsnInfo.substr(iPosFirst + 4,iPosEnd - iPosFirst - 4);
		else
			return S_FALSE;
	}
	else
		return S_FALSE;

	iPosFirst = strDsnInfo.find("uid=");
	if(iPosFirst != std::string::npos)
	{
		iPosEnd = strDsnInfo.find(";",iPosFirst);
		if(iPosEnd != std::string::npos)
			strUser = strDsnInfo.substr(iPosFirst + 4,iPosEnd - iPosFirst - 4);
		else
			return S_FALSE;
	}
	else
		return S_FALSE;

	iPosFirst = strDsnInfo.find("pwd=");
	if(iPosFirst != std::string::npos)
	{
		iPosEnd = strDsnInfo.find(";",iPosFirst);
		if(iPosEnd != std::string::npos)
			strPwd = strDsnInfo.substr(iPosFirst + 4,iPosEnd - iPosFirst - 4);
		else
			return S_FALSE;
	}
	else
		return S_FALSE;

	// 1. get connection
	try 
	{
		g_pConn = g_DbDriver->GetConnection(strDsn,strUser,strPwd);
	} 
	catch (const db::SqlException &e) 
	{
		//创建数据库连接失败,置数据库状态为Off
		//g_dbStatProbe.SetOff(m_strDSN);
		::SysFreeString(szDsnInfo);

		return S_FALSE;
	}

	::SysFreeString(szDsnInfo);
	
	return S_OK;
}

STDMETHODIMP CClsAdoOperater::PKGetXX(BSTR szBhType, BSTR szTableId, BSTR szXh, BSTR szKeyWords, VARIANT *pszContent)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState())

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

	//报号类型
	SetParaContent(m_parameters[0],db::PT_IN,
					_com_util::ConvertBSTRToString(szBhType),db::DT_STRING,"");
	//表名标识
	SetParaContent(m_parameters[1],db::PT_IN,
					_com_util::ConvertBSTRToString(szTableId),db::DT_STRING,"");
	//序号
	SetParaContent(m_parameters[2],db::PT_IN,
					_com_util::ConvertBSTRToString(szXh),db::DT_STRING,"");
	//关键词
	SetParaContent(m_parameters[3],db::PT_IN,
					_com_util::ConvertBSTRToString(szKeyWords),db::DT_STRING,"");
	//信息发布(单条)
	SetParaContent(m_parameters[4],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(pszContent);
		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(pszContent);
		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 = e.GetDescription().c_str();
		ccvar.Detach(pszContent);
		ccvar.Clear();

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

		return S_FALSE;
	}

	CComVariant ccvar;
	// 6. 取输出参数
	try 
	{
		GetProcResult(g_pStmt,m_parameters,iParaCount);
		ccvar = m_parameters[4].paramValue.c_str();
		ccvar.Detach(pszContent);
		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(pszContent);
		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;
}

STDMETHODIMP CClsAdoOperater::PKGetGG(BSTR szBhType, BSTR szTableId, BSTR szXh, BSTR szKeyWords, VARIANT *pszContent)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState())

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

	//报号类型
	SetParaContent(m_parameters[0],db::PT_IN,
					_com_util::ConvertBSTRToString(szBhType),db::DT_STRING,"");
	//表名标识
	SetParaContent(m_parameters[1],db::PT_IN,
					_com_util::ConvertBSTRToString(szTableId),db::DT_STRING,"");
	//序号
	SetParaContent(m_parameters[2],db::PT_IN,
					_com_util::ConvertBSTRToString(szXh),db::DT_STRING,"");
	//关键词
	SetParaContent(m_parameters[3],db::PT_IN,
					_com_util::ConvertBSTRToString(szKeyWords),db::DT_STRING,"");
	//广告内容(单条)
	SetParaContent(m_parameters[4],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(pszContent);
		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(pszContent);
		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.Detach(pszContent);
		ccvar.Clear();

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

		return S_FALSE;
	}

	CComVariant ccvar;
	// 6. 取输出参数
	try 
	{
		GetProcResult(g_pStmt,m_parameters,iParaCount);
		ccvar = m_parameters[4].paramValue.c_str();
		ccvar.Detach(pszContent);
		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(pszContent);
		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;
}

STDMETHODIMP CClsAdoOperater::PKGetZJ(BSTR szBhType, BSTR szTableId, BSTR szXh, BSTR szKeyWords, VARIANT *pszName, VARIANT *pszPhone)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState())

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

	//报号类型
	SetParaContent(m_parameters[0],db::PT_IN,
					_com_util::ConvertBSTRToString(szBhType),db::DT_STRING,"");
	//表名标识
	SetParaContent(m_parameters[1],db::PT_IN,
					_com_util::ConvertBSTRToString(szTableId),db::DT_STRING,"");
	//序号
	SetParaContent(m_parameters[2],db::PT_IN,
					_com_util::ConvertBSTRToString(szXh),db::DT_STRING,"");
	//关键词
	SetParaContent(m_parameters[3],db::PT_IN,
					_com_util::ConvertBSTRToString(szKeyWords),db::DT_STRING,"");
	//企业简称(单条)
	SetParaContent(m_parameters[4],db::PT_OUT,"",db::DT_STRING,"");
	//转接电话(单条)
	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(pszName);
		ccvar.Clear();

		ccvar = "";
		ccvar.Detach(pszPhone);
		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(pszName);
		ccvar.Clear();

		ccvar = "";
		ccvar.Detach(pszPhone);
		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();

⌨️ 快捷键说明

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