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

📄 ocidbclass.h

📁 通过oci实现的oracle查询分析器功能和可以 尤其对BLOB字段的度曲
💻 H
字号:
//---------------------------------------------------------------------------

#ifndef OciDbClassH
#define OciDbClassH
//---------------------------------------------------------------------------
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <io.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>
#include <oci.h>
#include <sys/timeb.h>
#include <sys/stat.h>
#include <string.h>
#include <stdio.h>
#include <fcntl.h>
#include <time.h>
#include <errno.h>
#include <signal.h>
#include "malloc.h"
#include "oci.h"
#define HIM_GETCFG_ERR		-5
#define MAXBUFLEN  1024*100
typedef struct
{
  char   FieldName[40];
  ub2    fieldtype;
  ub2    fieldlen;
} FIELDSTRUCT;

typedef struct
{
  char 	        TableName[40];
  int	        FieldNum;
  FIELDSTRUCT	FieldInfo[250];
} TABLESTRUCT;

typedef struct
{
  int		TableNum;
  TABLESTRUCT	TableInfo[40];
} DBSTRUCT;

typedef struct tagDATABASEHANDLE
{
  int		id;
  OCIEnv      	* envhp;
  OCIError    	* errhp;
  OCISvcCtx   	* svchp;
  OCIServer   	* srvhp;
  OCISession  	* authp;
  DBSTRUCT	wy_table_info;

}DATABASEHANDLE;

struct G_ConnPool
{
  CRITICAL_SECTION    MutexLock;
  int		      ConnNum;
  char		      *Stat;  //0 : 空闲
  DATABASEHANDLE      *DBHandle;
};

typedef struct
{
  OCIStmt        *stmtp;
  int	         position;
  char	         fieldname[30];
  OCIBind        * bndhp;
  char	         * value;
  int	         length;
  sb2	         indicator;
  int	         flag;
  ub2	         type;
  OCILobLocator  * blob;

} WY_BINDINFO;

typedef struct
{
  char	        FieldName[30];
  OCIDefine     * defhp;
  char          * Value;
  int	        Size;
  sb2	        indicator;
  ub2	        Type;
  OCILobLocator * blob;

} WY_DEFINEINFO;

typedef struct
{
  char           * CSname;
  char           * CFilename;
  OCIBind        * CSbndhp;
  Variant        CSvalue;
  char           * value;
  int            size;
  bool	         sybz;
  ub2	         CStype;
  OCILobLocator  * CSblob;

} IN_PARAM;


typedef struct
{
  int	         inputnums;
  WY_BINDINFO    * inputinfo;
  int	         outputnums;
  WY_DEFINEINFO  * outputinfo;

} SELECTINFO;


typedef struct tagOCI_CURSOR		          
{
   DATABASEHANDLE  DBHandle;
   char		   sTableName[50];	    //表名称
   char	           *sSQLStmt;	            //SQL查询语句
   OCIStmt 	   *selhp;
   SELECTINFO	   selinfo;
   long		   TotalLength;		    //字段值总长度
   long		   iResult;		    //查询记录数
} OCI_CURSOR;

typedef struct tagHIMOCICOMMON
{
  OCIEnv      *EnvHp;		           //OCI环境句柄
  OCIError    *ErrHp;			   //OCI错误句柄
  OCISvcCtx   *SvcHp;			   //OCI连文句柄
  OCIServer   *SvrHp;			   //OCI服务句柄
  OCISession  *AutHp;			   //OCI会话句柄

}HIMOCICOMMON , *PHIMOCICOMMON;		   //OCI全局公用变量结构

struct  HIMTSTRCUT
{
   int     FieldType ;
   char    *FieldName ;
   char    *FieldContent ;
};

//---------------------------------------------------------------------------





//---------------------------------------------------------------------------
//数据库操作类
class OCIDatabase
{
    private:
        char 	DBErrMsg[5000];
        char logmsg[1024];
        char tmpname[300];
        char tmpbuf[500];
        char Ora_Service[300],UserName[300],Password[300];
        int Connectcount;
        G_ConnPool     sG_ConnPool;

    public:

        OCIDatabase();
        ~OCIDatabase();
        int ConnectDataBase(DATABASEHANDLE & DBHandle);
        int DisConnectDataBase(DATABASEHANDLE & DBHandle);
        int TestOraAlive(DATABASEHANDLE & DBHandle);
        int pDisConnectDataBase(DATABASEHANDLE & DBHandle);
        int pConnectDataBase(DATABASEHANDLE & DBHandle,char * ErrMsg );
        int InitG_ConnPool(char Service[300],char User[300],char Pass[300],int count );
        int OCI_ExecuteStmt(DATABASEHANDLE & DBHandle,char * stmtstr, char * ErrMsg );
};

class   TOCIQuery
{
        private :

          char 	value[500000];
          char 	DBErrMsg[5000];
          char logmsg[1024];
          char tmpname[300];
          char tmpbuf[500];
          HIMTSTRCUT      FieldStruct[100];
          IN_PARAM        PARAStruct[100];

          char SQLStr[1024*4];
          int  csCount,RowCount,status;
          ub2 fieldtype;
          ub4 fieldlen,tmplen,parmcnt;
          unsigned long offset;
          SELECTINFO * selectinfo;
          OCIStmt * selecthp,*stmthp1,*binstmthp;
          OCIEnv      	* envhp;
          OCIError    	* errhp;
          OCISvcCtx   	* svchp;
          OCIServer   	* srvhp;
          OCISession  	* authp;
          OCIParam *parmdp;
          void	  *sel_cursor;

          int      _OCIErrorGet( DATABASEHANDLE & DBHandle,char * _ErrMsg );
          int      SelectPrepare();
          int      OCI_CloseCursor(void * & Handle);
          int      FreeSelectInfo( SELECTINFO * selectinfo );
          int      FreeSelectout( SELECTINFO * selectinfo );
          int      FreeSel_cursor( OCI_CURSOR * cursor );
          void     stream_write_lob( OCILobLocator *lob2, void* pData, int nLen);
          void     checkerr(OCIError *errhp,sword status);
          int     File_write_lob( OCILobLocator *lob2, char *FileName);
        public  :
          DATABASEHANDLE  DBHandle;
          ub4 prefetch;
          int FieldCount;
          char FSQLType[100];
          bool Eof;
          TOCIQuery();
          ~TOCIQuery();
          int AddSQL(char sqlstmt[1024*4]);
          int BINParamValue();
          int SetParamValue(char * ParamName,Variant PutValue);
          int SetBLOBParamValueFromstream(char * ParamName,TMemoryStream *stream);
          int SetBLOBParamValueFromFile(char * ParamName,char *FileName);
          char* GetFieldValueByName(char FieldName[200]);
          char* GetFieldValueByIndex(int idx);
          char* GetFieldName(int idx);
          WY_DEFINEINFO *Fields(int idx);
          WY_DEFINEINFO *FieldByName(char FieldName[200]);
          char GetRowid();
          int GetFieldType(int idx);
          int GetBLOBFieldByNameToFile(char FieldName[200],char FileName[600]);
          int GetBLOBFieldByIndexToFile(int idx,char FileName[600]);
          int GetBLOBFieldByNameToSteam(char FieldName[200],Classes::TStream* Stream);
          int GetBLOBFieldByIndexToSteam(int idx,Classes::TStream* Stream);
          int ExecSQL();
          int Next();
          int First();
          int RecordCount();
          int Last();
          int Prior();


};

#endif




⌨️ 快捷键说明

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