📄 wtdatabase.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 + -