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

📄 cdbsession.cpp

📁 学校两基管理系统
💻 CPP
字号:
/* Generated by Together */
#include "stdafx.h"
#include "CDBSession.h"

typedef struct ErrStruct{
	    INT serverity;
	    INT dberr;
	    INT oserr;
	    LPCSTR dberrstr;
	    LPCSTR oserrstr;
	} ERR;
	ERR SYSERR;
char msgbuf[1024];
char curbuf[1024];
int msgcode;


typedef struct MsgStruct
{
    DBINT msgno;
	INT msgstate;
	INT severity;
	LPCSTR msgtext;
	LPCSTR srvname;
	LPCSTR procname;
	DBUSMALLINT line;
} SQLMSG;
SQLMSG SYSMSG;

//错误级别定义
char *svrty[]={
	" ",
	"警告,非严重错误",
    "用户导致的错误",
    "非致命错误",
    "DB-Library数据类型转换时发生错误",
    "服务器已返回了错误标记",
    "等待服务器响应超时,但DBPROCESS仍然有效",
    "用户程序代码错误",
    "资源用尽,DBPROCESS可能无效",
    "与服务器通信时发生错误,DBPROCESS已经无效",
    "致命错误,DBPROCESS已经无效",
    "系统软件内部发生错误"
};

char *GetErr()
{
/*    sprintf(errbuf,"错误级别:%d,错误号:%d,消息:%s",SYSERR.serverity,SYSERR.dberr,SYSERR.dberrstr);
	if (SYSERR.oserr != DBNOERR)
	{
        sprintf(errbuf,"错误级别:%d,错误号:%d,消息:%s",SYSERR.serverity,SYSERR.oserr,SYSERR.oserrstr);
    }
    /*if (strlen(SYSMSG.msgtext)>0)
	    strcat(errbuf,SYSMSG.msgtext);
	    */
	//msgCount=0;
    sprintf(msgbuf,"%s",curbuf);
    curbuf[0]=0;
    return msgbuf;
}
int GetMsgCode()
{
    return msgcode;
}
int SetMsg(char *msg)
{
    //msgCount=0;
    sprintf(msgbuf,"%s",msg);
    return 1;
}

int Err_Handle(DBPROCESS *dbproc,INT severity,INT dberr,INT oserr,LPCSTR dberrstr,LPCSTR oserrstr)
{
    SYSERR.serverity=severity;
    SYSERR.dberr=dberr;
    SYSERR.oserr=oserr;
    SYSERR.dberrstr=dberrstr;
    SYSERR.oserrstr=oserrstr;
    return INT_CANCEL;
	
}
int Msg_Handle(DBPROCESS *dbproc,DBINT msgno,INT msgstate,
	           INT severity,LPCSTR msgtext,LPCSTR srvname,
	           LPCSTR procname,DBUSMALLINT line)
{
    SYSMSG.msgno=msgno;
    msgcode=msgno;
    if (msgno==5701) return 0;
	if(curbuf[0]==0)
    {
    //sprintf(curbuf,"消息号:%d, 级别:%d, 状态:%d, 行:%d\n%s\n",
	    sprintf(curbuf,"来自%s的消息 消息号:%d, 级别:%d, 状态:%d, 行:%d\n%s\n",
	        srvname,msgno,severity,msgstate,line,msgtext);
	}
    else
    {
        char curMsg[250];
	    sprintf(curMsg,"消息号:%d, 级别:%d, 状态:%d, 行:%d\n%s",
	        msgno,severity,msgstate,line,msgtext);
	    strcat(curbuf,curMsg);
	}
    
    return 0;
}
CDBSession::CDBSession(){
    SetAutoThrow(true);
    SetAppName();
    SetLogFileName();
    SetErrLogFile();
    SetOutConsole();
//    memset(dbproc_status,0,MAXPROCS);

}

//CDBSession::~CDBSession(){}

bool CDBSession::Connect(char *UserName,char *Password,char *SrvName)
{
    
//    dberrhandle((DBERRHANDLE_PROC)Err_Handle);
	dbmsghandle((DBMSGHANDLE_PROC)Msg_Handle);
//    try{
	DBLVer=dbinit();
    WriteLog(false,"%s",DBLVer);
    login=dblogin();
    DBSETLUSER(login,UserName);
    DBSETLPWD(login,Password);
    DBSETLAPP(login,app_name);
    BCP_SETL(login,TRUE);//设置批拷贝
    dbsetmaxprocs(MAXPROCS);
    for(int i=0;i<MAXPROCS;i++)
	{
       dbproc[i]=dbopen(login,SrvName);
       if(dbproc[i]==NULL)
       {
           char tmp[200];
	       sprintf(tmp,"severity:%d %s, DBErrCode:%d, DBErrStr:%s 创建连接失败. 服务名:%s",
	            SYSERR.serverity,svrty[SYSERR.serverity],SYSERR.dberr,SYSERR.dberrstr,SrvName);
	        WriteLog(false,tmp);
	        //AfxMessageBox(tmp);
	        /*"severity:%d %s, DBErrCode:%d, DBErrStr:%s 创建连接失败. 服务名:%s",
	            SYSERR.serverity,svrty[SYSERR.serverity],SYSERR.dberr,SYSERR.dberrstr,SrvName);
	            */
	        /*
	        if(SYSERR.oserr != DBNOERR)
	        {
	            sprintf(tmp,"severity:%d %s,OSErrCode:%d, OSErrStr:%s 服务名:%s",
	                SYSERR.serverity,svrty[SYSERR.serverity],SYSERR.oserr,SYSERR.oserrstr,SrvName);
	            WriteLog(true,tmp);
	        }
	        */
	        AfxMessageBox(tmp);//ErrCheck();
	        return FALSE;
	    }
	   dbproc_status[i]=1;
	}
    WriteLog(false,"成功登录到%s",SrvName);
//    dbfreelogin(login);
//    return dbproc;
	return TRUE;
}
void CDBSession::SetAppName(char *AppName) 
{
    if(AppName[0]!=0) app_name=AppName;
}
void CDBSession::SetLogFileName(char *FileName)
{
    if(FileName[0]!=0) LogFileName=FileName;
}
void CDBSession::SetErrLogFile(char *FileName)
{
    if(FileName[0]!=0) ErrLogFile=FileName;
}
void CDBSession::SetOutConsole(bool b)
{
    _output_to_console=b;
}
int CDBSession::SetDataBase(char *DBName)
{
 
    for(int i=0;i<MAXPROCS;i++)
	{
        if(dbuse(dbproc[i],DBName)==FAIL)         
	        ErrCheck(ERR_BIND_DATABASE_FAIL,DBName);
	}
    return 1;
}
void CDBSession::ErrCheck(int code,char *str)
{
    char tmp[100];
	memset(tmp,0,100);
    SetErrCode(code);
    switch(code)
    {
    case ERR_NO_FIND_COL:
	    if(str!=NULL)
	        sprintf(tmp,ERR_MSG[-code-100],str);
	    else strcpy(tmp,ERR_MSG[-code-100]);
	    SetErrMsg(tmp);
	    break;
	case ERR_BCP_BIND_COL:
	    if(str!=NULL)
	        sprintf(tmp,ERR_MSG[-code-100],str);
	    else strcpy(tmp,ERR_MSG[-code-100]);
	    SetErrMsg(tmp);
	    break;
	case ERR_COLTYPE_NOT_MATCHING:
	    if(str!=NULL)
	        sprintf(tmp,ERR_MSG[-code-100],str);
	    else strcpy(tmp,ERR_MSG[-code-100]);
	    SetErrMsg(tmp);
	    break;
    case ERR_MAX_SQLSTR:
	    if(str!=NULL)
	        sprintf(tmp,ERR_MSG[-code-100],str);
	    else strcpy(tmp,ERR_MSG[-code-100]);
	    SetErrMsg(tmp);
	    break;
	case ERR_BIND_DATABASE_FAIL:
	    if(str!=NULL)
	        sprintf(tmp,ERR_MSG[-code-100],str);
	    else strcpy(tmp,ERR_MSG[-code-100]);
	    SetErrMsg(tmp);
	    break;
	case ERR_NO_FIND_COMPUTEID:
	    if(str!=NULL)
	        sprintf(tmp,ERR_MSG[-code-100],str);
	    else strcpy(tmp,ERR_MSG[-code-100]);
	    SetErrMsg(tmp);
	    break;
	case ERR_NO_FIND_COMPUTECOLS:
	    if(str!=NULL)
	        sprintf(tmp,ERR_MSG[-code-100],str);
	    else strcpy(tmp,ERR_MSG[-code-100]);
	    SetErrMsg(tmp);
	    break;
	case ERR_RESULTS_NOROWS:
	    if(str!=NULL)
	        sprintf(tmp,ERR_MSG[-code-100],str);
	    else strcpy(tmp,ERR_MSG[-code-100]);
	    SetErrMsg(tmp);
	    break;
	case ERR_DBSYS:
	    break;
	default:
        strcpy(tmp,ERR_MSG[-code-100]);
        SetErrMsg(tmp);
    }
    if (GetAutoThrow()) 
	    throw (*((CDBError *)this));
	    //throw(*((WOCIError *)this));
}
int CDBSession::WriteLog(bool ErrLog,const char *format,...)
{
    va_list vlist;
	va_start(vlist,format);
    FILE *lgfp=NULL;
	if (ErrLog)
	    lgfp=fopen(ErrLogFile,"a+t");
	else
        lgfp=fopen(LogFileName,"a+t");
    if (lgfp==NULL) 
	    return ErrLog ? -1 : -2;
	int rt;
	CTime curtime=CTime::GetCurrentTime();
	char tmptime[15];
	sprintf(tmptime,"%s",curtime.Format("%Y-%m-%d %H:%M:%S"));
	fprintf(lgfp,"[%s] ",tmptime);
	if (_output_to_console)
	    rt=vprintf(format,vlist);
	
    rt=vfprintf(lgfp,format,vlist);
    int fmtlen=strlen(format);
	if(fmtlen > 1 && format[fmtlen - 1] !='\n')
	{
        if(_output_to_console)
            printf("\n");
        fprintf(lgfp,"\n");
    }
    va_end(vlist);
    fclose(lgfp);
    return rt;
}

⌨️ 快捷键说明

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