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

📄 ora_context.pc

📁 ORACLE数据库的批量插入例子
💻 PC
字号:
#define SQLCA_STORAGE_CLASS extern

EXEC SQL INCLUDE ora_context.pch;

#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <windows.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 ;
	EXEC SQL WHENEVER SQLERROR  DO on_error();
	EXEC SQL CONTEXT ALLOCATE :m_context;
}


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

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;
	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;
		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 + -