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

📄 dblibrary.cpp

📁 又服务器+客户端,不错的例子. 但是有所不同.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	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 + -