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

📄 interface.cpp

📁 学校两基管理系统
💻 CPP
字号:
#include "stdafx.h"
#include "interface.h"
#include "stdio.h"

#include "CDBError.h"
#include "CDBSession.h"
#include "CDBStatement.h"
#include "CDBTable.h"


void checkError(char *fn,int line,int errcode);
#define THROW_ERROR(ecode) {checkError(__FILE__,__LINE__,ecode); }

#define NO_FREE_HANDLE		-1
#define INVALID_HANDLE		-2
#define NEW_SESS_FAIL		-3
#define NEW_STMT_FAIL		-4
#define NEW_TABL_FAIL		-5


#define MAX_SESS		20 //cdbsession
#define MAX_STMT		100
#define MAX_TABL		100//

#define HANDLE_SESS		0x2000
#define HANDLE_STMT     0x4000
#define HANDLE_TABL		0x6000

static CDBSession *hd_sess[MAX_SESS];
static CDBStatement *hd_stmt[MAX_STMT];
static CDBTable *hd_table[MAX_TABL];

static bool b_init=false;
DllExport void dbInit( char *AppName)
{
	if(b_init) return;

	int i=0;
	for(i=0; i<MAX_SESS; i++)
		hd_sess[i] = NULL;
	for(i=0; i<MAX_STMT; i++)
		hd_stmt[i] = NULL;
	for(i=0; i<MAX_TABL; i++)
		hd_table[i] = NULL;
}

void checkError(char *fn,int line,int errcode)
{
	CDBError err;
	char buf[100];
	err.SetErrCode(errcode);
	err.SetErrPos(line,fn);

	switch (errcode){
	case NO_FREE_HANDLE:
		strcpy(buf,"没有空闲的HANDLE");
		break;
	case INVALID_HANDLE:
		strcpy(buf,"无效的HANDLE");
		break;
	case NEW_SESS_FAIL:
		strcpy(buf,"创建CDBSession对象失败");
		break;
	case NEW_STMT_FAIL:
		strcpy(buf,"创建CDBStatement对象失败");
		break;
	case NEW_TABL_FAIL:
		strcpy(buf,"创建CDBTable对象失败");
		break;
	default:
		strcpy(buf,"没有定义的错误");
	}
	err.SetErrMsg(buf);
	throw (err);
}
int getFreeHandle(void **pobject,int objNum)
{
	int i=0,rt=-1;
	for(;i<objNum; i++)
		if(pobject[i]==NULL){rt = -1;break;}

	if(rt != -1) {
		pobject[rt] = (void *)-1;
		return rt;
	}
	return -1;
}
int checkHandle(int p,int len)
{
	if(p<0 || p>=len)
		THROW_ERROR(INVALID_HANDLE);
	return p;
}
DllExport int createDBSession(char *user,char *password,char *svrname)
{
	int fh=getFreeHandle((void **)hd_sess,MAX_SESS);
	if(fh == -1) THROW_ERROR(NO_FREE_HANDLE);
	bool rt=false;
	CDBSession *p=new CDBSession();
	if(p == NULL) THROW_ERROR(NEW_SESS_FAIL);

	try{
		rt = p->Connect(user,password,svrname);
	}catch(...){
		delete p;
		p = NULL;
		throw;
	}
	if(p != NULL)
		hd_sess[fh] = p;
	return fh+HANDLE_SESS;
}

⌨️ 快捷键说明

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