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

📄 ocisess.cpp

📁 一个通用的oracle OCI开发程序包
💻 CPP
字号:
#ifndef _COCISession
#include "ocisess.h"
#endif

#ifndef _INC_STRING
#include <string.h>
#endif


COCISession::COCISession()
: authp(0)
, srvhp(0)
, svchp(0)
, envhp(0)
, errhp(0)
, m_bConnected(false)
{
}

COCISession::~COCISession()
{
  if(m_bConnected)
  {
    end();
    detach_server();
    CHECK(errhp,OCIHandleFree((dvoid *)srvhp,(ub4)OCI_HTYPE_SERVER));
    CHECK(errhp,OCIHandleFree((dvoid *)svchp,(ub4)OCI_HTYPE_SVCCTX));
    CHECK(errhp,OCIHandleFree((dvoid *)authp,(ub4)OCI_HTYPE_SESSION));
    CHECK(errhp,OCIHandleFree((dvoid *)errhp,(ub4)OCI_HTYPE_ERROR));
    CHECK(errhp,OCIHandleFree((dvoid *)envhp,(ub4)OCI_HTYPE_ENV));
  }
}

void COCISession::connect(unsigned char* username, unsigned char* password, unsigned char* server,
                          ub4 init_mode)
{
  init_handles(init_mode);
  attach_server(server);
  log_on(username,password);
  strcpy(m_server_name, (char *)server);
  strcpy(m_username, (char *)username);
  m_bConnected = true;
}

void COCISession::connect(char* uid, ub4 init_mode)
{
  char uid_copy[100];
  strcpy(uid_copy, uid);
  char seps[]="/@";
  char* token;
  char* components[3] = {NULL,NULL,NULL};
  token = strtok((char*)uid_copy, seps);
  int component_cnt = 0;
  while(token != NULL)
  {
	  components[component_cnt] = token;
	  component_cnt++;
	  token = strtok(NULL, seps);
  }
  connect((unsigned char*)components[0],(unsigned char*)components[1], (unsigned char*)components[2] ? (unsigned char*)components[2] : (unsigned char*)"",init_mode);
}


void COCISession::disconnect()
{
  CHECK(errhp,OCILogoff(svchp, errhp));
  m_bConnected = false;
}

sword COCISession::init_handles(ub4 init_mode)
{
   CHECK(errhp,OCIInitialize(init_mode, (dvoid *)0,
                    (dvoid * (*)(dvoid *, size_t)) 0,
                    (dvoid * (*)(dvoid *, dvoid *, size_t))0,
                    (void (*)(dvoid *, dvoid *)) 0 ));

  /* Inititialize the OCI Environment */
  CHECK(errhp,OCIEnvInit((OCIEnv **) &envhp, (ub4) OCI_DEFAULT,
                 (size_t) 0, (dvoid **) 0 ));
 
  /* Allocate a service handle */
  CHECK(errhp,OCIHandleAlloc((dvoid *) envhp, (dvoid **) &svchp,
                     (ub4) OCI_HTYPE_SVCCTX, (size_t) 0, (dvoid **) 0));
 
  /* Allocate an error handle */
  CHECK(errhp,OCIHandleAlloc((dvoid *) envhp, (dvoid **) &errhp,
                     (ub4) OCI_HTYPE_ERROR, (size_t) 0, (dvoid **) 0));
 
  /* Allocate a server handle */
  CHECK(errhp,OCIHandleAlloc((dvoid *) envhp, (dvoid **) &srvhp,
                     (ub4) OCI_HTYPE_SERVER, (size_t) 0, (dvoid **) 0));
 
  /* Allocate a authentication handle */
  CHECK(errhp,OCIHandleAlloc((dvoid *) envhp, (dvoid **) &authp,
                     (ub4) OCI_HTYPE_SESSION, (size_t) 0, (dvoid **) 0));
 
  return OCI_SUCCESS;

}

sword COCISession::attach_server(unsigned char* server)
{
  CHECK(errhp,OCIServerAttach(srvhp, errhp, (unsigned char *) server,
                     (sb4) strlen((char *)server), (ub4) OCI_DEFAULT));


  /* Set the server handle in the service handle */
  CHECK(errhp,OCIAttrSet((dvoid *) svchp, (ub4) OCI_HTYPE_SVCCTX,
                 (dvoid *) srvhp, (ub4) 0, (ub4) OCI_ATTR_SERVER, errhp));
 
  return OCI_SUCCESS;

}

sword COCISession::detach_server()
{
  CHECK(errhp,OCIServerDetach ( srvhp, errhp, OCI_DEFAULT)); 
  return OCI_SUCCESS;

}

void COCISession::end()
{
  CHECK(errhp,OCISessionEnd(svchp, errhp, authp, OCI_DEFAULT));
}

sword COCISession::log_on(unsigned char* username, unsigned char* password,
                          ub4 credt, ub4 mode)
{
    /* Set attributes in the authentication handle */
  CHECK(errhp,OCIAttrSet((dvoid *) authp, (ub4) OCI_HTYPE_SESSION,
                 (dvoid *) username, (ub4) strlen((char *) username),
                 (ub4) OCI_ATTR_USERNAME, errhp));
  CHECK(errhp,OCIAttrSet((dvoid *) authp, (ub4) OCI_HTYPE_SESSION,
                 (dvoid *) password, (ub4) strlen((char *) password),
                 (ub4) OCI_ATTR_PASSWORD, errhp));
 

  CHECK(errhp,OCISessionBegin(svchp, errhp, authp, credt, mode));
 
  /* Set the authentication handle in the Service handle */
  CHECK(errhp,OCIAttrSet((dvoid *) svchp, (ub4) OCI_HTYPE_SVCCTX,
                 (dvoid *) authp, (ub4) 0, (ub4) OCI_ATTR_SESSION, errhp));
 
  return OCI_SUCCESS;	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          

}

COCISession& COCISession::operator = (const COCISession& src)
{
  if(this != &src)
  {
    authp = src.authp;
    srvhp = src.srvhp;
    svchp = src.svchp;
    envhp = src.envhp;
    errhp = src.errhp;
  }
  return *this;
}

std::string COCISession::get_server_version() const
{

  std::string tmp;
  tmp.resize(512);

  CHECK( errhp, OCIServerVersion ( svchp,
                                   errhp,
                                   (unsigned char*)tmp.c_str(), 512,
                                   OCI_HTYPE_SVCCTX));
  return tmp;
}


std::string uppercase(const char* str)
{
  std::string tmp = str;
  for(int i = 0; i < strlen(str); i++)
  {
    // Is the character lowercase?
    if(tmp[i] >= 'a' && tmp[i] <= 'z')
      tmp[i] = tmp[i]-'a'+'A';
  }
  return tmp;
}

⌨️ 快捷键说明

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