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

📄 wtdatabase.cpp

📁 将对Oracle数据库读写操作的OCI进行封装。不但具有普通数据的读取操作
💻 CPP
字号:
/*
* 文件名:    WTDataBase.cpp
*     
* 作者:      施立虹
*             
* 描述:      用来连接 oracle 数据库!
*     
* 全局变量:  无
*          
* 修订记录:
*     日期            修订者           修订描述
*     2004-06-16      施立虹          创建本文件
*/

// WTDataBase.cpp: implementation of the CWTDataBase class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "WTDataBase.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CWTDataBase::CWTDataBase()
{

}

CWTDataBase::~CWTDataBase()
{

}

/*
* 函数名称: Initialize
* 编写者:   施立虹 
* 功能:     初始化对象
* 输入参数: 
* 输出参数: 
* 返回值:   TRUE 或 FALSE
* 注意事项: 
* 修订记录:
*     日期            修订者           修订描述
*    2004-06-16       施立虹           创建
*/
BOOL CWTDataBase::Initialize()
{
	sword  status = 0;

	//初始化OCI进程环境
	status = OCIInitialize((ub4)(OCI_OBJECT), (dvoid *)0, 0, 0, 0);
	if(status == OCI_ERROR)
		return FALSE;

	//初使化OIC环境
	status = OCIEnvInit(&m_phenv, OCI_DEFAULT, 0, 0);
	if(status == OCI_ERROR)
		return FALSE;

	//分配服务器句柄
	status = OCIHandleAlloc((dvoid *)m_phenv, (dvoid **)&m_phsrv,  OCI_HTYPE_SERVER,  0,0);
	if(status == OCI_ERROR)
	{
		OCIHandleFree((dvoid *)m_phsrv, (ub4)OCI_HTYPE_SERVER);
		return FALSE;
	}

	//分配服务环境句柄
	status = OCIHandleAlloc((dvoid *)m_phenv, (dvoid **)&m_phsvc,  OCI_HTYPE_SVCCTX,  0,0);
	if(status == OCI_ERROR)
	{
		OCIHandleFree((dvoid *)m_phsrv, (ub4)OCI_HTYPE_SERVER);
		OCIHandleFree((dvoid *)m_phsvc, (ub4)OCI_HTYPE_SVCCTX);
		return FALSE;
	}

	//分配会话句柄
	status = OCIHandleAlloc((dvoid *)m_phenv, (dvoid **)&m_phusr,  OCI_HTYPE_SESSION, 0,0);
	if(status == OCI_ERROR)
	{
		OCIHandleFree((dvoid *)m_phsrv, (ub4)OCI_HTYPE_SERVER);
		OCIHandleFree((dvoid *)m_phsvc, (ub4)OCI_HTYPE_SVCCTX);
		OCIHandleFree((dvoid *)m_phusr, (ub4)OCI_HTYPE_SESSION);
		return FALSE;
	}

	return TRUE; 
}

/*
* 函数名称: UnInitialize
* 编写者:   施立虹 
* 功能:     释放资源
* 输入参数: 
* 输出参数: 
* 返回值:   
* 注意事项: 
* 修订记录:
*     日期            修订者           修订描述
*    2004-06-16       施立虹           创建
*/
void CWTDataBase::UnInitialize()
{
	//释放 OCI 句柄
	OCIHandleFree((dvoid *)m_phsvc, (ub4)OCI_HTYPE_SVCCTX);
	OCIHandleFree((dvoid *)m_phsrv, (ub4)OCI_HTYPE_SERVER);
	OCIHandleFree((dvoid *)m_phusr, (ub4)OCI_HTYPE_SESSION);
	m_phsvc = NULL;
	m_phsrv = NULL;
	m_phusr = NULL;
}

/*
* 函数名称: Close
* 编写者:   施立虹 
* 功能:     结束会话,断开与数据库的连接
* 输入参数: phError
* 输出参数: 
* 返回值:   
* 注意事项: 
* 修订记录:
*     日期            修订者           修订描述
*    2004-06-16       施立虹           创建
*/
BOOL CWTDataBase::Close(CWTError *phError)
{
	unsigned int status = 0;
	//结束会话
	status = OCISessionEnd(m_phsvc, phError->m_pherr, m_phusr, (ub4)0);
	if(status == OCI_ERROR)
	{
			phError->m_status = status;
		return FALSE;
	}

	//断开与数据库的连接
	OCIServerDetach(m_phsrv, phError->m_pherr, (ub4)OCI_DEFAULT);
	if(status == OCI_ERROR)
	{
			phError->m_status = status;
		return FALSE;
	}

	return TRUE;
}

/*
* 函数名称: Connect
* 编写者:   施立虹 
* 功能:     连接数据库
* 输入参数: strDBName,strUserName,strPassWord,strPower,phError
* 输出参数: 
* 返回值:   TRUE 或 FALSE
* 注意事项: 
* 修订记录:
*     日期            修订者           修订描述
*    2004-06-16       施立虹           创建
*/
BOOL CWTDataBase::Connect(CString  strDBName,
						  CString  strUserName,
						  CString  strPassWord,
						  CString  strPower,
						  CWTError *phError
						  )
{
	sb4 length = 0;
	unsigned int status = 0;
	text textSvcName[1024] = {0};
	length = (sb4)strDBName.GetLength() + 1;
	wsprintf((char *)textSvcName,"%s",strDBName);
	textSvcName[length - 1] = '\0';

	//unknowPower 为用户权限
	ub4 unknowPower = (ub4)OCI_DEFAULT;//默认权限
	if(strPower == _T("OCI_DEFAULT"))
	{
		unknowPower = (ub4)OCI_DEFAULT;
	}
	if(strPower == _T("OCI_SYSDBA"))
	{
		unknowPower = (ub4)OCI_SYSDBA;
	}
	if(strPower == _T("OCI_SYSOPER"))
	{
		unknowPower = (ub4)OCI_SYSOPER;
	}

	//绑定服务器(名称)
	status = OCIServerAttach(m_phsrv, phError->m_pherr, 
		(text *)textSvcName, length, OCI_DEFAULT);
	if(status == OCI_ERROR)
	{
		if(phError != NULL)
			phError->m_status = status;
		return FALSE;
	}

	//设置服务环境:数据库(服务器)
	status = OCIAttrSet((dvoid *)m_phsvc, 
		(ub4)OCI_HTYPE_SVCCTX, (dvoid *)m_phsrv, (ub4)0, 
	    (ub4)OCI_ATTR_SERVER, phError->m_pherr);
	if(status == OCI_ERROR)
	{
		if(phError != NULL)
			phError->m_status = status;
		return FALSE;
	}

	//认证用户并开始会话
	LPCTSTR user,pwd;
	user = strUserName;   //用户名
	pwd = strPassWord;    //用户密码

	//设置 user
	status = OCIAttrSet((dvoid *)m_phusr, (ub4)OCI_HTYPE_SESSION, 
	    (dvoid *)user, (ub4)strlen(user), 
	    (ub4)OCI_ATTR_USERNAME, phError->m_pherr);
	if(status == OCI_ERROR)
	{
		if(phError != NULL)
			phError->m_status = status;
		return FALSE;
	}


	//设置 pass word
	status = OCIAttrSet((dvoid *)m_phusr, (ub4)OCI_HTYPE_SESSION, 
	    (dvoid *)pwd, (ub4)strlen(pwd), 
	    (ub4)OCI_ATTR_PASSWORD, phError->m_pherr);
	if(status == OCI_ERROR)
	{
		if(phError != NULL)
			phError->m_status = status;
		return FALSE;
	}


	//验证用户并开始会话
	status = OCISessionBegin(m_phsvc, phError->m_pherr, m_phusr, OCI_CRED_RDBMS, unknowPower);
	if(status == OCI_ERROR)
	{
		if(phError != NULL)
			phError->m_status = status;
		return FALSE;
	}

	//设置服务环境:用户
	status = OCIAttrSet((dvoid *)m_phsvc, (ub4)OCI_HTYPE_SVCCTX, (dvoid *)m_phusr, (ub4)0, 
	    (ub4)OCI_ATTR_SESSION, phError->m_pherr);
	if(status == OCI_ERROR)
	{
		if(phError != NULL)
			phError->m_status = status;
		return FALSE;
	}

	return TRUE;
}

⌨️ 快捷键说明

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