📄 cdbsession.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 + -