📄 dblibrary.cpp
字号:
return 1;
}
int DBLibrary::GetDate(char *colName,char *strdate)
{
int id=GetColID(colName);
if (id==ERR_NO_FIND_COL)
ErrCheck(ERR_NO_FIND_COL,colName);
switch(COL->type)
{
case SQLDATETIM4:
case SQLDATETIME:
DBDATEREC dc;
int rt;
rt=dbdatecrack(dbproc,&dc,(DBDATETIME *)dbdata(dbproc,COL->index));
if (rt==1)
{
char tmp_date[20];
/* sprintf(tmp_date,"%04d-%02d-%02d %02d:%02d:%02d",
dc->year,dc->month,dc->day,dc->hour,dc->minute,dc->second);
*/
sprintf(tmp_date,"%04d-%02d-%02d %02d:%02d:%02d",
dc.year,dc.month,dc.day,dc.hour,dc.minute,dc.second);
//memset(strdate,' ',strlen(tmp_date));
// (strdate,tmp_date,strlen(tmp_date));*/
sprintf(strdate,"%s",tmp_date);
return 1;
}
ErrCheck(ERR_COLTYPE_NOT_MATCHING,colName);
default:
ErrCheck(ERR_COLTYPE_NOT_MATCHING,colName);
}
return 1;
}
int DBLibrary::InitBCP(char *SourceTableName,
char *OutFileName,
char *LogFileName,
const int BCPT)
{
return bcp_init(dbproc,(LPCSTR)SourceTableName,(LPCSTR)OutFileName,(LPCSTR)LogFileName,BCPT);
}
long DBLibrary::BatchCopyToFile(char *TableName,
char *FileName,
int col[],
int cols,
char *term,
int termlen,
int StartRow
//int BatchNum
)
{
/* if(InitBCP(TableName,FileName,"outLogFile.txt",DB_OUT)==FAIL)
return ERR_BATCH_COPY_INIT;
if(bcp_control(dbproc,BCPFIRST,(DBINT)StartRow)==FAIL)
return ERR_BATCH_COPY_CONTROL;
if (bcp_columns(dbproc,cols)==FAIL)
return ERR_BATCH_COPY_COLSET;
for (int i=1;i<=cols;i++)
{
if (i==cols)
{
if (bcp_colfmt(dbproc,i,SQLCHAR,0,-1,(LPCBYTE)"\r\n",2,col[i-1])==FAIL)
return ERR_BATCH_COPY_FORMAT;
}
else
if (bcp_colfmt(dbproc,i,SQLCHAR,0,-1,(LPCBYTE)term,termlen,col[i-1])==FAIL)
return ERR_BATCH_COPY_FORMAT;
}
long rows=0;
if(bcp_exec(dbproc,&rows)==FAIL)
if (rows>0)
return rows;
else
return ERR_BATCH_COPY_EXEC;
return rows;
*/
if(bcp_init(dbproc,"test_db","test_db.txt",(LPCSTR)NULL,DB_OUT)==FAIL)
throw "bcp_init error";
if(bcp_control(dbproc,BCPFIRST,(DBINT)1)==FAIL)
throw "bcp_control error";
if(bcp_columns(dbproc,3)==FAIL)
throw "bcp_columns error";
if(bcp_colfmt(dbproc,1,SQLCHAR,0,(DBINT)42,(LPCBYTE)"\t",1,1)==FAIL)
throw "bcp_colfmt error (col:1)";
if(bcp_colfmt(dbproc,2,SQLCHAR,0,(DBINT)42,(LPCBYTE)"\r\n",2,2)==FAIL)
throw "bcp_colfmt error (col:2)";
/* if(bcp_colfmt(dbproc,3,SQLCHAR,0,-1,(LPCBYTE)",",1,3)==FAIL)
throw "bcp_colfmt error (col:1)";
if(bcp_colfmt(dbproc,4,SQLCHAR,0,-1,(LPCBYTE)",",1,4)==FAIL)
throw "bcp_colfmt error (col:2)";
if(bcp_colfmt(dbproc,5,SQLCHAR,0,-1,(LPCBYTE)",",1,5)==FAIL)
throw "bcp_colfmt error (col:1)";
if(bcp_colfmt(dbproc,6,SQLCHAR,0,-1,(LPCBYTE)",",1,6)==FAIL)
throw "bcp_colfmt error (col:2)";
if(bcp_colfmt(dbproc,7,SQLCHAR,0,-1,(LPCBYTE)",",1,7)==FAIL)
throw "bcp_colfmt error (col:1)";
if(bcp_colfmt(dbproc,8,SQLCHAR,0,-1,(LPCBYTE)",",1,8)==FAIL)
throw "bcp_colfmt error (col:2)";
if(bcp_colfmt(dbproc,9,SQLCHAR,0,-1,(LPCBYTE)",",1,9)==FAIL)
throw "bcp_colfmt error (col:1)";
if(bcp_colfmt(dbproc,10,SQLCHAR,0,-1,(LPCBYTE)"\r\n",2,10)==FAIL)
throw "bcp_colfmt error (col:2)";
*/
long rows=0;
if(bcp_exec(dbproc,&rows)==FAIL)
throw "bcp_exec error";
return rows;
}
int DBLibrary::ExecSQL(const char *format,...)
{
dbcancel(dbproc);
char strSQL[STRSQLMAX];
int sql_len=0;
va_list vlist;
va_start(vlist,format);
sql_len=vsprintf(strSQL+1,format,vlist);
strSQL[0]=' ';
va_end(vlist);
if (sql_len>=STRSQLMAX - 1)
{
char len[5];
sprintf(len,"%d",STRSQLMAX);
ErrCheck(ERR_MAX_SQLSTR,len);
}
if (dbcmd(dbproc,strSQL)!=SUCCEED)
ErrCheck(ERR_SQL_CMD);
// if (!asynchronism) //如果不是异步执行
if(dbsqlexec(dbproc)==FAIL) ErrCheck();
if(dbresults(dbproc)==FAIL) ErrCheck(ERR_SQL_RESULTS);
//else {}
return 1;
}
int DBLibrary::BeginTrans()
{
dbcancel(dbproc);
HRESULT curHr=0;
curHr = pTransactionDispenser->BeginTransaction(
NULL, // /* [in] */ IUnknown __RPC_FAR *punkOuter,
ISOLATIONLEVEL_ISOLATED, // /* [in] */ ISOLEVEL isoLevel,
ISOFLAG_RETAIN_DONTCARE, // /* [in] */ ULONG isoFlags,
NULL, // /* [in] */ ITransactionOptions *pOptions
&pTransaction // /* [out] */ ITransaction **ppTransaction
) ;
if (FAILED (curHr))
ErrCheck(ERR_TRANS_BEGIN);
RETCODE rc = 0;
rc = dbenlisttrans (dbproc, pTransaction);
if (FAIL == rc)
ErrCheck(ERR_TRANS_LIST);
ISTRANS=true;
return 1;
/*
if(dbcmd(dbproc," BEGIN TRANSACTION ")==SUCCEED)
{
if(dbcmd(dbproc," SAVE TRANSACTION dbtransaction ")==SUCCEED)
return 1;
else return -1;
}
*/
}
int DBLibrary::CommitTrans()
{
HRESULT curHr=0;
curHr = pTransaction->Commit(0,0,0);
if (FAILED(curHr))
{
curHr = pTransaction->Release();
if (FAILED(curHr))
ErrCheck(ERR_TRANS_COMMIT_RELEASE);
ErrCheck(ERR_TRANS_COMMIT);
}
// At end of each transaction, pTransaction-Release() must be called.
// pTransactionDispenser->Release();
/* if (dbenlisttrans (dbproc, NULL)==FAIL)
{
sprintf(msg,"%s","提交成功后释放事务失败.");
SetMsg(msg);
throw GetErr();
}
*/
curHr = pTransaction->Release();
if (FAILED(curHr))
ErrCheck(ERR_TRANS_RELEASE);
if (dbenlisttrans (dbproc, NULL)==FAIL)
ErrCheck(ERR_TRANS_FREE);
ISTRANS=false;
return 1;
}
int DBLibrary::RollbackTrans()
{
if ( !ISTRANS ) return 0;
HRESULT curHr=0;
curHr=pTransaction->Abort(NULL,FALSE,FALSE);
if (FAILED(curHr))
ErrCheck(ERR_TRANS_ABORT);
if (dbenlisttrans(dbproc,NULL)==FAIL)
ErrCheck(ERR_TRANS_ROLLBACK_RELEASE);
pTransaction->Release();
ISTRANS=FALSE;
return 1;
//pTransactionDispenser->Release();
}
int DBLibrary::InitTrans()
{
hr = DtcGetTransactionManager(NULL, // LPTSTR pszHost,
NULL, // LPTSTR pszTmName,
IID_ITransactionDispenser, // /* in */ REFIID rid,
0, // /* in */ DWORD dwReserved1,
0, // /* in */ WORD wcbReserved2,
0, // /* in */ void FAR * pvReserved2,
(void **)&pTransactionDispenser // /*out */ void** ppvObject
) ;
if (FAILED (hr))
ErrCheck(ERR_DTC_MANAGER);
return 1;
}
int DBLibrary::BCPInitTable(char *tableName)
{
dbcancel(dbproc);
if(dbfcmd(dbproc,"select top 0 * from %s ",tableName)==FAIL)
ErrCheck(ERR_SQL_CMD);
if(dbsqlexec(dbproc)==FAIL)
ErrCheck();
if(dbresults(dbproc)==FAIL)
ErrCheck(ERR_SQL_RESULTS);
int cols=dbnumcols(dbproc);
if(cols<1) {
char cur[100];
sprintf(cur,"select top 0 * from %s ",tableName);
ErrCheck(ERR_RESULTS_NOCOLS,cur);
}
COLINFO *p,*q;
int i=0;
p=q=NULL;
if(COLUMN!=NULL) q=COLUMN;
while(q)
{
COLUMN=COLUMN->next;
p=COLUMN;
delete q;
q=p;
}
COLUMN=NULL;
while(++i<=cols)
{
p=new COLINFO;
sprintf(p->name,"%s",strupr((char*)dbcolname(dbproc,i)));
p->index=i;
p->type=dbcoltype(dbproc,i);
p->len=dbdatlen(dbproc,i);
p->next=NULL;
if(COLUMN==NULL)
COLUMN=q=p;
else
{
q->next=p;
q=q->next;
}
}
//int i=0;
/*int len=0;
char *str1;
while(++i<=cols)
{
str1=(char *)dbcolname(dbproc,i);
len=strlen(str1);
ColumnName[i-1]=new char[len];
sprintf(ColumnName[i-1],"%s",strupr(str1));
*(ColumnType+(i-1))=dbcoltype(dbproc,i);
}
*/
if(dbcancel(dbproc)==FAIL)
ErrCheck(ERR_CANCEL_RESULTS);
if(bcp_init(dbproc,tableName,(LPCSTR)NULL,(LPCSTR)NULL,DB_IN)==FAIL)
ErrCheck(ERR_BATCH_COPY_INIT);
return 1;
}
int DBLibrary::BCPInteger(char *colName,long *lpvalue)
{
int id=0;
id=GetColID(colName);
if(id==ERR_NO_FIND_COL)
ErrCheck(ERR_NO_FIND_COL,colName);
if(bcp_bind(dbproc,(LPCBYTE)lpvalue,0,(DBINT)-1,(LPCBYTE)NULL,0,COL->type,COL->index)==FAIL)
ErrCheck(ERR_BCP_BIND_COL,colName);
return 1;
}
int DBLibrary::BCPDouble(char *colName,double *dpvalue)
{
int id=0;
id=GetColID(colName);
if(id==ERR_NO_FIND_COL)
ErrCheck(ERR_NO_FIND_COL,colName);
//switch (*(ColumnType+(id-1)))
switch(COL->type)
{
case SQLMONEY4:
static DBMONEY4 sm;
if(dbconvert(NULL,SQLFLT8,(LPCBYTE)dpvalue,(DBINT)-1,SQLMONEY4,(LPBYTE)&sm,(DBINT)-1)==FAIL)
ErrCheck(ERR_COLTYPE_NOT_MATCHING,colName);
if(bcp_bind(dbproc,(LPCBYTE)&sm,0,(DBINT)-1,(LPCBYTE)NULL,0,0,COL->index)==FAIL)
ErrCheck(ERR_BCP_BIND_COL,colName);
break;
case SQLMONEY:
static DBMONEY m;
if(dbconvert(NULL,SQLFLT8,(LPCBYTE)dpvalue,(DBINT)-1,SQLMONEY,(LPBYTE)&m,(DBINT)-1)==FAIL)
ErrCheck(ERR_COLTYPE_NOT_MATCHING,colName);
if(bcp_bind(dbproc,(LPCBYTE)&m,0,(DBINT)-1,(LPCBYTE)NULL,0,0,COL->index)==FAIL)
ErrCheck(ERR_BCP_BIND_COL,colName);
break;
default:
if(bcp_bind(dbproc,(LPCBYTE)dpvalue,0,(DBINT)-1,(LPCBYTE)NULL,0,COL->type,COL->index)==FAIL)
ErrCheck(ERR_BCP_BIND_COL,colName);
}
return 1;
}
int DBLibrary::BCPString(char *colName,char *cpvalue)//,char *term="\0",int termlen=1)
{
int id=0;
id=GetColID(colName);
if(id==ERR_NO_FIND_COL)
ErrCheck(ERR_NO_FIND_COL,colName);
switch(COL->type)
{
case SQLDATETIM4:
static DBDATETIM4 sdt;
if(dbconvert(NULL,SQLCHAR,(LPCBYTE)cpvalue,(DBINT)-1,SQLDATETIM4,(LPBYTE)&sdt,(DBINT)-1)==FAIL)
ErrCheck(ERR_COLTYPE_NOT_MATCHING,colName);
if(bcp_bind(dbproc,(LPCBYTE)&sdt,0,(DBINT)-1,(LPCBYTE)NULL,0,0,COL->index)==FAIL)
ErrCheck(ERR_BCP_BIND_COL,colName);
break;
case SQLDATETIME:
static DBDATETIME d;
if(dbconvert(NULL,SQLCHAR,(LPCBYTE)cpvalue,(DBINT)-1,SQLDATETIME,(LPBYTE)&d,(DBINT)-1)==FAIL)
ErrCheck(ERR_COLTYPE_NOT_MATCHING,colName);
if(bcp_bind(dbproc,(LPCBYTE)&d,0,(DBINT)-1,(LPCBYTE)NULL,0,0,COL->index)==FAIL)
ErrCheck(ERR_BCP_BIND_COL,colName);
break;
default:
//static char *cur=cpvalue;
if(bcp_bind(dbproc,(LPCBYTE)cpvalue,0,(DBINT)strlen(cpvalue),(LPCBYTE)NULL,0,COL->type,COL->index)==FAIL)//(LPCBYTE)term,termlen,*(ColumnType+(id-1)),id)==FAIL)
ErrCheck(ERR_BCP_BIND_COL,colName);
}
return 1;
}
int DBLibrary::BCPSaveDone()
{
if(bcp_sendrow(dbproc)==FAIL)
ErrCheck(ERR_BCP_SEND_ROW);
if(bcp_done(dbproc)==FAIL)
ErrCheck(ERR_BCP_SAVE_DONE);
return 1;
}
int DBLibrary::BCPSaveBatch()
{
if(bcp_sendrow(dbproc)==FAIL)
ErrCheck(ERR_BCP_SEND_ROW);
if(bcp_batch(dbproc)==FAIL)
ErrCheck(ERR_BCP_SAVE_BATCH);
return 1;
}
int DBLibrary::BCPBinary(char *colName,char *buf)
{
int id=0;
int len=strlen(buf);
// DBBINARY *curB=new DBBINARY[len+1];
// memset(curB,0,len+1);
// id=bcp_sendrow(dbproc);
id=GetColID(colName);
if(id==ERR_NO_FIND_COL)
ErrCheck(ERR_NO_FIND_COL,colName);
//switch(*(ColumnType+(id-1)))
switch(COL->type)
{
case SQLBINARY:
/*
if(dbconvert(NULL,SQLCHAR,(LPCBYTE)buf,(DBINT)len,SQLBINARY,(LPBYTE)curB,(DBINT)len)==FAIL)
return ERR_COLTYPE_NOT_MATCHING;
*/
if(bcp_bind(dbproc,(LPCBYTE)buf,0,(DBINT)len,(LPCBYTE)NULL,0,SQLBINARY,COL->index)==FAIL)
ErrCheck(ERR_BCP_BIND_COL,colName);
/*
if(bcp_bind(dbproc,(LPCBYTE)NULL,0,(DBINT)len,(LPCBYTE)NULL,0,SQLBINARY,id)==FAIL)
return ERR_BCP_BIND_COL;
if(bcp_moretext(dbproc,(DBINT)len,(LPCBYTE)buf)==FAIL)
return ERR_BCP_MORETEXT;
*/
break;
case SQLVARBINARY:
/*
if(dbconvert(NULL,SQLCHAR,(LPCBYTE)buf,(DBINT)-1,SQLVARBINARY,(LPBYTE)curB,(DBINT)-1)==FAIL)
return ERR_COLTYPE_NOT_MATCHING;
*/
if(bcp_bind(dbproc,(LPCBYTE)buf,0,(DBINT)len,(LPCBYTE)NULL,0,SQLVARBINARY,COL->index)==FAIL)
ErrCheck(ERR_BCP_BIND_COL,colName);
/*
if(bcp_bind(dbproc,(LPCBYTE)NULL,0,(DBINT)len,(LPCBYTE)NULL,0,SQLVARBINARY,id)==FAIL)
return ERR_BCP_BIND_COL;
if(bcp_moretext(dbproc,(DBINT)len,(LPCBYTE)buf)==FAIL)
return ERR_BCP_MORETEXT;
*/
break;
case SQLIMAGE:
/*
if(dbconvert(NULL,SQLCHAR,(LPCBYTE)buf,(DBINT)-1,SQLIMAGE,(LPBYTE)curB,(DBINT)-1)==FAIL)
return ERR_COLTYPE_NOT_MATCHING;
*/
if(bcp_bind(dbproc,(LPCBYTE)buf,0,(DBINT)len,(LPCBYTE)NULL,0,SQLBINARY,COL->index)==FAIL)
ErrCheck(ERR_BCP_BIND_COL,colName);
/*
if(bcp_bind(dbproc,(LPCBYTE)NULL,0,(DBINT)len,(LPCBYTE)NULL,0,SQLIMAGE,id)==FAIL)
return ERR_BCP_BIND_COL;
if(bcp_moretext(dbproc,(DBINT)len,(LPCBYTE)buf)==FAIL)
return ERR_BCP_MORETEXT;
*/
break;
default:
ErrCheck(ERR_COLTYPE_NOT_MATCHING,colName);
}
return 1;
}
int DBLibrary::ProcInit(char *procName)
{
if(dbrpcinit(dbproc,procName,(DBSMALLINT)0)==FAIL)
ErrCheck(ERR_PROC_INIT);
return 1;
}
int DBLibrary::ProcParam(char *param,
bool isReturn,
int paramType,
long maxlen,
long datalen,
LPCBYTE paramValue)
{
int statu=0;
if(isReturn) statu=DBRPCRETURN;
if(dbrpcparam(dbproc,param,statu,paramType,(DBINT)maxlen,(DBINT)datalen,(LPCBYTE)paramValue)==FAIL)
ErrCheck(ERR_PROC_PARAM);
return 1;
}
int DBLibrary::ProcExec()
{
EOFTAG=false;
INIT_TAG=FALSE;
// dbcancel(dbproc);
if(dbrpcexec(dbproc)==FAIL)
ErrCheck(ERR_PROC_SEND);
if(dbsqlok(dbproc)==FAIL)
ErrCheck(ERR_PROC_LOCK);
/*
if(dbresults(dbproc)==FAIL)
return ERR_PROC_RESULT;
*/
COLInit();
//dbprrow(dbproc);
return 1;
}
void DBLibrary::init()
{
EOFTAG=false;
INIT_TAG=false;
ISTRANS=false;
hr=S_OK;
pTransaction=NULL;
pTransactionDispenser=NULL;
COLUMN=NULL;
COL=NULL;
COMPUTE_COLS=100;
ParamType.SQL_tinyint = SQLINT1;
ParamType.SQL_smallint = SQLINT2;
ParamType.SQL_int = SQLINT4;
ParamType.SQL_real = SQLFLT4;
ParamType.SQL_float = SQLFLT8;
ParamType.SQL_decimal = SQLDECIMAL;
ParamType.SQL_numeric = SQLNUMERIC;
ParamType.SQL_smallmoney = SQLMONEY4;
ParamType.SQL_money = SQLMONEY;
ParamType.SQL_char = SQLCHAR;
ParamType.SQL_varchar = SQLVARCHAR;
ParamType.SQL_smalldatetime = SQLDATETIM4;
ParamType.SQL_datetime = SQLDATETIME;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -