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

📄 ora_context.~cpp

📁 ORACLE数据库的批量插入例子
💻 ~CPP
📖 第 1 页 / 共 2 页
字号:
	int convert_Connected_Database;
	int convert_display;
	char convert_log_name[256] ;


protected:	
	char m_context_name[40];
	int  m_threadid;
	char m_CurrentDir[256];

};
#endif


#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <sys\types.h>
#include "GlobalVar.h"
#include "mutex.h"



ora_context::ora_context(char* classname,int threadid)
{
	strcpy(m_context_name,classname);
	m_threadid = threadid;
	GetCurrentDirectory(256,m_CurrentDir);
	convert_Connected_Database= DATABASE_STATUS_DISCONNECTED;
	convert_display=1;
	sprintf(convert_log_name,"VNConvert_ERR");

	convert_error_flag=0;
//???????need to declare error handler?
	/* EXEC SQL ENABLE THREADS ; */ 

{
 struct sqlexd sqlstm;
 sqlstm.sqlvsn = 10;
 sqlstm.arrsiz = 0;
 sqlstm.sqladtp = &sqladt;
 sqlstm.sqltdsp = &sqltds;
 sqlstm.stmt = "";
 sqlstm.iters = (unsigned int  )1;
 sqlstm.offset = (unsigned int  )5;
 sqlstm.cud = sqlcud0;
 sqlstm.sqlest = (unsigned char  *)&sqlca;
 sqlstm.sqlety = (unsigned short)256;
 sqlstm.occurs = (unsigned int  )0;
 sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
}


	/* EXEC SQL WHENEVER SQLERROR  DO on_error(); */ 

	/* EXEC SQL CONTEXT ALLOCATE :m_context; */ 

{
 struct sqlexd sqlstm;
 sqlstm.sqlvsn = 10;
 sqlstm.arrsiz = 1;
 sqlstm.sqladtp = &sqladt;
 sqlstm.sqltdsp = &sqltds;
 sqlstm.stmt = "";
 sqlstm.iters = (unsigned int  )1;
 sqlstm.offset = (unsigned int  )20;
 sqlstm.cud = sqlcud0;
 sqlstm.sqlest = (unsigned char  *)&sqlca;
 sqlstm.sqlety = (unsigned short)256;
 sqlstm.occurs = (unsigned int  )0;
 sqlstm.sqhstv[0] = (         void  *)&m_context;
 sqlstm.sqhstl[0] = (unsigned int  )sizeof(void *);
 sqlstm.sqhsts[0] = (         int  )0;
 sqlstm.sqindv[0] = (         void  *)0;
 sqlstm.sqinds[0] = (         int  )0;
 sqlstm.sqharm[0] = (unsigned int  )0;
 sqlstm.sqadto[0] = (unsigned short )0;
 sqlstm.sqtdso[0] = (unsigned short )0;
 sqlstm.sqphsv = sqlstm.sqhstv;
 sqlstm.sqphsl = sqlstm.sqhstl;
 sqlstm.sqphss = sqlstm.sqhsts;
 sqlstm.sqpind = sqlstm.sqindv;
 sqlstm.sqpins = sqlstm.sqinds;
 sqlstm.sqparm = sqlstm.sqharm;
 sqlstm.sqparc = sqlstm.sqharc;
 sqlstm.sqpadto = sqlstm.sqadto;
 sqlstm.sqptdso = sqlstm.sqtdso;
 sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
 if (sqlca.sqlcode < 0) on_error();
}


}


ora_context::~ora_context()
{
//???????need to declare error handler?
	/* EXEC SQL WHENEVER SQLERROR  DO on_error(); */ 

	/* EXEC SQL CONTEXT FREE :m_context; */ 

{
 struct sqlexd sqlstm;
 sqlstm.sqlvsn = 10;
 sqlstm.arrsiz = 1;
 sqlstm.sqladtp = &sqladt;
 sqlstm.sqltdsp = &sqltds;
 sqlstm.stmt = "";
 sqlstm.iters = (unsigned int  )1;
 sqlstm.offset = (unsigned int  )39;
 sqlstm.cud = sqlcud0;
 sqlstm.sqlest = (unsigned char  *)&sqlca;
 sqlstm.sqlety = (unsigned short)256;
 sqlstm.occurs = (unsigned int  )0;
 sqlstm.sqhstv[0] = (         void  *)&m_context;
 sqlstm.sqhstl[0] = (unsigned int  )sizeof(void *);
 sqlstm.sqhsts[0] = (         int  )0;
 sqlstm.sqindv[0] = (         void  *)0;
 sqlstm.sqinds[0] = (         int  )0;
 sqlstm.sqharm[0] = (unsigned int  )0;
 sqlstm.sqadto[0] = (unsigned short )0;
 sqlstm.sqtdso[0] = (unsigned short )0;
 sqlstm.sqphsv = sqlstm.sqhstv;
 sqlstm.sqphsl = sqlstm.sqhstl;
 sqlstm.sqphss = sqlstm.sqhsts;
 sqlstm.sqpind = sqlstm.sqindv;
 sqlstm.sqpins = sqlstm.sqinds;
 sqlstm.sqparm = sqlstm.sqharm;
 sqlstm.sqparc = sqlstm.sqharc;
 sqlstm.sqpadto = sqlstm.sqadto;
 sqlstm.sqptdso = sqlstm.sqtdso;
 sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
 if (sqlca.sqlcode < 0) on_error();
}


}

int ora_context::DisplayConvertInGUI(char *info)
{
	if((convert_display==1)&&(info))//&&(g_SGIP_HWND)
	{
//		CString *msg = new CString(info);
//		::PostMessage(g_SGIP_HWND,WM_LOGMSG,(WPARAM)msg,0);
		printf("%s\n",info);
	}
	return 0;
}

int ora_context::errorlogwrite (char *log_name,const char *data)
{

	FILE* fp;
	time_t timer; 
	struct tm *tblock; 
	char mytime[20];
	char filename[256];
	sprintf(filename,"%s\\%s%d.log",m_CurrentDir,log_name,m_threadid);
	
	if((fp = fopen(filename,"a")) == NULL)
	{
		return 0;
	}
	timer = time(NULL); 	
	tblock = localtime(&timer);
	strftime(mytime, 20, "%Y:%m:%d %H:%M:%S", tblock);
	fprintf(fp,"%s,线程%s --- %s\n",mytime,m_context_name,data);
	fflush(fp);
 	fclose(fp);	
	return 1;
}

void ora_context::on_error(void)
{//when dealing error need not use context, see examples of oracle
	char db_error[200];
  memset(db_error,0,sizeof(db_error));
	convert_error_flag = -1;
	/* EXEC SQL CONTEXT USE :m_context; */ 

  /* EXEC SQL WHENEVER SQLERROR CONTINUE; */ 

  sprintf(db_error,"线程%s,Convert Oracle error detected : % .70s\n", m_context_name,sqlca.sqlerrm.sqlerrmc);
  /* EXEC SQL ROLLBACK WORK RELEASE; */ 

{
  struct sqlexd sqlstm;
  sqlstm.sqlvsn = 10;
  sqlstm.arrsiz = 1;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )58;
  sqlstm.cud = sqlcud0;
  sqlstm.sqlest = (unsigned char  *)&sqlca;
  sqlstm.sqlety = (unsigned short)256;
  sqlstm.occurs = (unsigned int  )0;
  sqlcxt(&m_context, &sqlctx, &sqlstm, &sqlfpn);
}


	convert_Connected_Database = DATABASE_STATUS_DISCONNECTED;	
	DisplayConvertInGUI(db_error);
	errorlogwrite(convert_log_name,db_error);
}

int ora_context::conn_db(char* user,char* pwd,char* conn)
{
	/* EXEC SQL BEGIN DECLARE SECTION; */ 

		char db_username[40];
		char db_password[80];
		char db_conn[80];
	/* EXEC SQL END DECLARE SECTION; */ 


	static mutex excluder;


//need not memset these variable?
	strncpy(db_username,user,18);
	strncpy(db_password,pwd,38);
	strncpy(db_conn,conn,38);

	/* EXEC SQL CONTEXT USE :m_context; */ 


	convert_error_flag=0;
	
	if(excluder.get_in()==SUCCESS)
	{
		/* EXEC SQL WHENEVER SQLERROR  DO on_error(); */ 

		/* EXEC SQL CONNECT :db_username IDENTIFIED BY :db_password USING :db_conn; */ 

{
  struct sqlexd sqlstm;
  sqlstm.sqlvsn = 10;
  sqlstm.arrsiz = 4;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.iters = (unsigned int  )10;
  sqlstm.offset = (unsigned int  )73;
  sqlstm.cud = sqlcud0;
  sqlstm.sqlest = (unsigned char  *)&sqlca;
  sqlstm.sqlety = (unsigned short)256;
  sqlstm.occurs = (unsigned int  )0;
  sqlstm.sqhstv[0] = (         void  *)db_username;
  sqlstm.sqhstl[0] = (unsigned int  )40;
  sqlstm.sqhsts[0] = (         int  )40;
  sqlstm.sqindv[0] = (         void  *)0;
  sqlstm.sqinds[0] = (         int  )0;
  sqlstm.sqharm[0] = (unsigned int  )0;
  sqlstm.sqadto[0] = (unsigned short )0;
  sqlstm.sqtdso[0] = (unsigned short )0;
  sqlstm.sqhstv[1] = (         void  *)db_password;
  sqlstm.sqhstl[1] = (unsigned int  )80;
  sqlstm.sqhsts[1] = (         int  )80;
  sqlstm.sqindv[1] = (         void  *)0;
  sqlstm.sqinds[1] = (         int  )0;
  sqlstm.sqharm[1] = (unsigned int  )0;
  sqlstm.sqadto[1] = (unsigned short )0;
  sqlstm.sqtdso[1] = (unsigned short )0;
  sqlstm.sqhstv[2] = (         void  *)db_conn;
  sqlstm.sqhstl[2] = (unsigned int  )80;
  sqlstm.sqhsts[2] = (         int  )80;
  sqlstm.sqindv[2] = (         void  *)0;
  sqlstm.sqinds[2] = (         int  )0;
  sqlstm.sqharm[2] = (unsigned int  )0;
  sqlstm.sqadto[2] = (unsigned short )0;
  sqlstm.sqtdso[2] = (unsigned short )0;
  sqlstm.sqphsv = sqlstm.sqhstv;
  sqlstm.sqphsl = sqlstm.sqhstl;
  sqlstm.sqphss = sqlstm.sqhsts;
  sqlstm.sqpind = sqlstm.sqindv;
  sqlstm.sqpins = sqlstm.sqinds;
  sqlstm.sqparm = sqlstm.sqharm;
  sqlstm.sqparc = sqlstm.sqharc;
  sqlstm.sqpadto = sqlstm.sqadto;
  sqlstm.sqptdso = sqlstm.sqtdso;
  sqlcxt(&m_context, &sqlctx, &sqlstm, &sqlfpn);
  if (sqlca.sqlcode < 0) on_error();
}


		excluder.get_out();
	}
	else
	{
		convert_error_flag=-1;
		return -1;
	}
	if(convert_error_flag==-1) return -1;
	else return 0;
}

⌨️ 快捷键说明

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