亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? tociquery.cpp

?? oci是操作oracle數(shù)據(jù)庫(kù)的接口,已對(duì)相應(yīng)的接口用C++進(jìn)行的封裝成類,以方便使用
?? CPP
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
/********************************************************************	Copyright by 97Dept. of Wholewise, 2001-07-01	File Name: TOCIQuery.cpp	Created Date: 2001/12/19:13:42	Author:	CHEN GONG JIAN		Create Version: 0.0.01	Create Version Date: 2001/12/19	purpose:		----------------------------------------------------------------------		Author:		HU GUO BIAO		Modified Version:				Modified Version Date:	2001/12/19:13:43		Function Changed:			cxx: Warning: TOCIQuery.cpp, line 579: statement is unreachable									break;			------------------------^			cxx: Warning: TOCIQuery.cpp, line 971: use of "=" where "==" may have been inted					else if (db->errorNo == OCI_SUCCESS)			-----------------^				Author:		Chengj				Modified Version Date: 2002/01/19		purpose:				1. Date Support			2. Blob Support			3. Prefetch data to improve performance			4. Memory leak eliminate(use Rational Purify testing tool)		----------------------------------------		Author:		Yuzj				Modified Version Date: 2002/03/27		purpose:				Modify function name:TOCIQuery::GetParamsDef()			error:				該函數(shù)的算法存在問題,在提取SQL語(yǔ)句的參數(shù)時(shí)			判斷for循環(huán)結(jié)束的條件有可能存在內(nèi)存越界的問題,			在一定條件下會(huì)造成內(nèi)存越界.			任務(wù)單號(hào):DX20020327003		4)  Modified By Name of Programmer	Yeyh		Date YYYY-MM-DD			2002-06-27		Current Version: 0.0.0.5	Task nbr: IBSS20020518002		Function Changed:			SetParameter(char *paramName, long paramValue, bool isOutput)			修改long類型參數(shù)對(duì)應(yīng)的oracle數(shù)據(jù)類型		Other changes:				5)  Modified By Name of Programmer	黃錦添 		Date YYYY-MM-DD			2002-07-09		Current Version: 0.0.0.6	Task nbr: IBSS20020709015		Function Changed: 			在TOCIQuery類中增加成員bExecuteFlag			TOCIQuery::TOCIQuery()		將bExecuteFlag置為false			TOCIQuery::Execute()		將bExecuteFlag置為true			TOCIQuery::Commit() 		將bExecuteFlag置為false			TOCIQuery::Rollback()		將bExecuteFlag置為false			TOCIQuery::~TOCIQuery()		判斷bExecuteFlag,若為true則向log中記錄可能鎖表 		Other changes:			包含文件userlog.h 		.............		6)Modified By Name of Programmer	YUZJ		Date YYYY-MM-DD			2002-07-09		Current Version: 0.0.0.7	Task nbr: IBSS20020718003		Function Changed: 			GetFieldsDef函數(shù)中有一處size賦值有誤		Other changes:			*********************************************************************/#include <TOCIQuery.h>#include <stdio.h>#include <oci.h>#include <string.h>#include <ctype.h>#include <math.h>#include <stdlib.h>#include <oratypes.h>#include <ocidfn.h>#include <ocidem.h>#include <ociapr.h>//Added begin at ver : 0.0.0.6#define __DEBUG__#ifdef __DEBUG__#include <userlog.h>#endif//Added end at ver : 0.0.0.6TOCIException::TOCIException(sword errNumb, OCIError *hErr, char *cat, char *sql){	int nLen;	sb4 errcode;	nLen = strlen(cat);	nLen = (nLen >= MAX_ERR_CAT_LENGTH)? MAX_ERR_CAT_LENGTH : nLen;	strncpy(errCategory,cat,nLen);	errCategory[nLen] = '\0';		nLen = strlen(sql);	nLen = nLen >= MAX_SQLSTMT_LENGTH ? MAX_SQLSTMT_LENGTH : nLen;	strncpy(errSQL,sql,nLen);	errSQL[nLen] = '\0';		errNo = errNumb;	(void)OCIErrorGet ((dvoid *) hErr, (ub4) 1, (text *) NULL, &errcode,			errMessage, (ub4)sizeof(errMessage)-1, (ub4) OCI_HTYPE_ERROR);}TOCIException::TOCIException(const char *sql, const char* errFormat, ...){	int nLen;	nLen = strlen(sql);	nLen = (nLen >= MAX_SQLSTMT_LENGTH) ? MAX_SQLSTMT_LENGTH :nLen;	strncpy(errSQL,sql,nLen);	errSQL[nLen] = '\0';	va_list ap;	va_start(ap, errFormat);	vsprintf((char *)errMessage, errFormat, ap);		va_end(ap);}TOCIException::~TOCIException(){}char *TOCIException::GetErrSrc() const{	return( (char *)errSQL );}char *TOCIException::GetErrMsg() const{		return( (char *)errMessage);}//比較2個(gè)字符串是否相同(不考慮大小寫)bool inline CompareStrNoCase(char *ori, char *des){	int j,nLen1,nLen2;	bool sameChar;	nLen1 = strlen(ori);	nLen2 = strlen(des);	if (nLen1!=nLen2) return false;	sameChar = true;	for (j=0; j<nLen1; j++)		sameChar = sameChar && ( toupper(ori[j]) == toupper(des[j]) );	return sameChar;}/********* TConnection implementation *********/TOCIDatabase::TOCIDatabase(){	sword errorNo;	errorNo = OCIInitialize((ub4) OCI_DEFAULT,0, 0,0,0 );	errorNo = errorNo + OCIEnvInit( (OCIEnv **) &hEnv, (ub4) OCI_DEFAULT,(size_t) 0, (dvoid **) 0 );	//errorNo = errorNo + OCIHandleAlloc( (dvoid *) hEnv, (dvoid **) &hDBSvc,(ub4) OCI_HTYPE_SVCCTX,(size_t) 0, (dvoid **) 0);	errorNo = errorNo + OCIHandleAlloc( (dvoid *) hEnv, (dvoid **) &hDBErr,(ub4) OCI_HTYPE_ERROR,(size_t) 0, (dvoid **) 0);		errorNo = errorNo + OCIHandleAlloc( (dvoid *) hEnv, (dvoid **) &hSvr,(ub4) OCI_HTYPE_SERVER,(size_t) 0, (dvoid **) 0);			if ( errorNo != 0 )		throw TOCIException( "TOCIDatabase()", ERR_DB_INIT, __LINE__);	fConnected = false;	usr = NULL;	pwd = NULL;	tns = NULL;}TOCIDatabase::~TOCIDatabase(){	delete[] usr;	delete[] tns;	delete[] pwd;		if (fConnected) 		OCIServerDetach(hSvr, hDBErr, OCI_DEFAULT );		OCIHandleFree(hSvr, OCI_HTYPE_SERVER);			//OCIHandleFree(hDBSvc, OCI_HTYPE_SVCCTX);	OCIHandleFree(hDBErr,OCI_HTYPE_ERROR);	OCIHandleFree(hEnv,OCI_HTYPE_ENV);}void TOCIDatabase::SetLogin(char *user, char *password, char *tnsString){	if (fConnected)		throw TOCIException("SetLogin()", ERR_SET_LOGIN , __LINE__);		int nLen;	//保存外部傳遞的參數(shù)	if ( usr != NULL) 		delete[] usr;	if (pwd != NULL)		delete[] pwd;	if (tns != NULL)		delete[] tns;	//保存外部傳遞的參數(shù)	if (user)	{		nLen = strlen(user);		usr = new char[nLen+1];		strncpy(usr,user,nLen);		usr[nLen] = '\0';	}	else	{		nLen = 0;		usr = new char[1];		usr[0] = '\0';	}	if (password)	{		nLen = strlen(password);		pwd = new char[nLen+1];		strncpy(pwd,password,nLen);		pwd[nLen] = '\0';	}	else	{		nLen = 0;		pwd = new char[1];		pwd[0] = '\0';	}		if (tnsString)	{		nLen = strlen(tnsString);		tns = new char[nLen+1];		strncpy(tns,tnsString,nLen);		tns[nLen] = '\0';	}	else		{		nLen = 0;		tns = new char[1];		tns[0] = '\0';	}}bool TOCIDatabase::Connect(){	sword errorNo;	if (fConnected)		return true;		if ( (usr == NULL) || (tns==NULL) )		throw TOCIException("Connect()", ERR_CONNECT_NO_LOGIN_INFO, __LINE__);		errorNo = OCIServerAttach(hSvr, hDBErr, (text *)tns, strlen(tns), 0);	if (errorNo != OCI_SUCCESS)		throw TOCIException(errorNo, hDBErr, "Connect()", "try to connect Server");		return (fConnected = (errorNo == OCI_SUCCESS));}bool TOCIDatabase::Connect(char *inUsr, char *inPwd, char *inTns){	SetLogin(inUsr, inPwd, inTns);	return Connect();}void TOCIDatabase::Disconnect(){	if (!fConnected) return;	//OCISessionEnd (hDBSvc, hDBErr, hUser, OCI_DEFAULT);	dword errorNo = OCIServerDetach(hSvr, hDBErr, OCI_DEFAULT );	if (errorNo != OCI_SUCCESS)			throw TOCIException(errorNo, hDBErr,"Disconnect()", "OCIServerDetatch error");	fConnected = false;}/*********** Field Implementation*************/TOCIField::TOCIField(){	//初始化列信息,有部分的初始化信息在Describe中進(jìn)行	name = NULL;	hBlob = NULL;	hDefine = (OCIDefine *) 0; ;	fDataBuf = NULL;	fDataIndicator = NULL;	fParentQuery = NULL;	fReturnDataLen = 0;	size = 0;	precision = 0;	scale = 0;	size = 0;};TOCIField::~TOCIField(){	if (fDataIndicator != NULL)		delete[] fDataIndicator;	if (name != NULL)		delete[] name; 	if (fDataBuf != NULL)		delete[] fDataBuf;	if (type == SQLT_BLOB)		OCIDescriptorFree((dvoid *)hBlob, (ub4) OCI_DTYPE_LOB);}char* TOCIField::asString(){	int year, month, day, hour, minute, second;	if (fParentQuery->fBof || fParentQuery->fEof)		throw TOCIException(fParentQuery->fSqlStmt, ERR_NO_DATASET, "asString()", name);	if ( isNULL() )	{		sprintf((char *)fStrBuffer, NULL_STRING);		return (char *)fStrBuffer;	}	switch ( this->type )	{	case DATE_TYPE:		this->asDateTimeInternal(year, month, day, hour, minute, second);		sprintf((char *)fStrBuffer,"%d-%d-%d", year, month, day);		return (char *)fStrBuffer;	case INT_TYPE:	case FLOAT_TYPE:		return((char *)(fDataBuf + (size+1) * fParentQuery->fCurrRow));	case STRING_TYPE:	case ROWID_TYPE:		return((char *)(fDataBuf + (size+1) * fParentQuery->fCurrRow));	case SQLT_BLOB:		sprintf((char *)fStrBuffer, "BLOB...");		return (char *)fStrBuffer;	default:		throw TOCIException(fParentQuery->fSqlStmt, ERR_DATA_TYPE_CONVERT, name, type, "asString()");	}}bool TOCIField::isNULL(){	return (fDataIndicator[fParentQuery->fCurrRow]==-1);}void  TOCIField::asBlobFile(const char *fileName){	ub4 offset = 1;	ub1 buf[MAX_LOB_BUFFER_LENGTH];	ub4 nActual = 0;	//實(shí)際讀取數(shù)	ub4 nTry = 0;		//試圖讀取數(shù)	ub4 totalSize = 0;	FILE *fileHandle;	ub4 lobLength;	if (fParentQuery->fBof || fParentQuery->fEof)		throw TOCIException(fParentQuery->fSqlStmt, ERR_NO_DATASET, "asBlobFile()", name);	if (type != SQLT_BLOB)		throw TOCIException(fParentQuery->fSqlStmt, ERR_DATA_TYPE_CONVERT, name, type, "asLobFile()");	fileHandle = fopen( fileName, (const char *) "wb");	fseek(fileHandle, 0, 0);	/* set amount to be read per iteration */	nTry = nActual = MAX_LOB_BUFFER_LENGTH;	OCILobGetLength(fParentQuery->hSvc, fParentQuery->hErr, hBlob, &lobLength);	while (nActual)	{		fParentQuery->fErrorNo = OCILobRead(fParentQuery->hSvc, fParentQuery->hErr, 			hBlob, &nActual, (ub4)offset, (dvoid *) buf, (ub4) nTry, (dvoid *)0, 			(sb4 (*)(dvoid *, CONST dvoid *, ub4, ub1)) 0, (ub2) 0, (ub1) SQLCS_IMPLICIT);		fParentQuery->CheckError();	  				if (nActual<=0) break;				totalSize += nActual;		fwrite((void *)buf, (size_t)nActual, (size_t)1, fileHandle);		offset += nActual;	}	fclose(fileHandle);}void  TOCIField::asBlobBuffer(unsigned char* &buf, unsigned int *lobLength){	ub1 innerBuf[MAX_LOB_BUFFER_LENGTH];	ub4 remainder, nActual, nTry;	ub4  flushedAmount = 0, offset = 1;	if (fParentQuery->fBof || fParentQuery->fEof)		throw TOCIException(fParentQuery->fSqlStmt, ERR_NO_DATASET, "asBlobBuffer()", name);	if (type != SQLT_BLOB)		throw TOCIException(fParentQuery->fSqlStmt, ERR_DATA_TYPE_CONVERT, name, type, "asLobBuffer()");	OCILobGetLength(fParentQuery->hSvc, fParentQuery->hErr, hBlob, &remainder);	*lobLength = nActual = nTry = remainder;	try	{		buf = new unsigned char[sizeof(ub1) * remainder];	}	catch (...)	{		throw TOCIException(fParentQuery->fSqlStmt, ERR_NOMORE_MEMORY_BE_ALLOCATED, "asBlobBuffer()", __LINE__);	}	nTry = nActual = MAX_LOB_BUFFER_LENGTH;	while (remainder)	{				fParentQuery->fErrorNo = OCILobRead(fParentQuery->hSvc, fParentQuery->hErr, 			hBlob, &nActual, (ub4)offset, (dvoid *)innerBuf, (ub4) nTry, (dvoid *)0, 			(sb4 (*)(dvoid *, CONST dvoid *, ub4, ub1)) 0, (ub2) 0, (ub1) SQLCS_IMPLICIT);		fParentQuery->CheckError();	  		memcpy( (buf) + offset -1, innerBuf, nActual);		if (nActual<=0) break;				offset += nActual;		remainder -= nActual;	}}void  TOCIField::LoadFromFile(const char *fileName){	ub4 remainder, nActual, nTry, offset = 1;//從文件中讀取的剩余數(shù)據(jù)量	ub1 buf[MAX_LOB_BUFFER_LENGTH];	ub4 LobLength;	ub4  flushedAmount = 0;	FILE *fileHandle ;	if (fParentQuery->fBof || fParentQuery->fEof)		throw TOCIException(fParentQuery->fSqlStmt, ERR_NO_DATASET, "LoadFromFile()", name);	if (type != SQLT_BLOB)		throw TOCIException(fParentQuery->fSqlStmt, ERR_DATA_TYPE_CONVERT, name, type, "LoadFromFile()");	if( (fileHandle = fopen(fileName, (const char *) "rb")) == NULL )		throw TOCIException(fParentQuery->fSqlStmt, ERR_FILE_IO, "LoadFromFile()", fileName);		fseek(fileHandle,0,SEEK_END);	remainder = ftell(fileHandle);	fseek(fileHandle, 0, 0);	fParentQuery->fErrorNo = OCILobGetLength(fParentQuery->hSvc, fParentQuery->hErr, hBlob, &LobLength);	fParentQuery->CheckError();	fParentQuery->fErrorNo = OCILobTrim(fParentQuery->hSvc, fParentQuery->hErr, hBlob, 0);	fParentQuery->CheckError();	/* enable the BLOB locator for buffering operations */	fParentQuery->fErrorNo = OCILobEnableBuffering(fParentQuery->hSvc, fParentQuery->hErr, hBlob);	fParentQuery->CheckError();	while ( (remainder > 0) && !feof(fileHandle))	{		nActual = nTry = (remainder > MAX_LOB_BUFFER_LENGTH) ? MAX_LOB_BUFFER_LENGTH : remainder;				if (fread((void *)buf, (size_t)nTry, (size_t)1, fileHandle) != (size_t)1)			throw TOCIException(fParentQuery->fSqlStmt, ERR_MEM_BUFFER_IO, name, fileName, __LINE__);				fParentQuery->fErrorNo = OCILobWrite(fParentQuery->hSvc, fParentQuery->hErr, 			hBlob, &nActual, offset, (dvoid *) buf, (ub4) nTry, OCI_ONE_PIECE, (dvoid *)0,			(sb4 (*)(dvoid *, dvoid *, ub4 *, ub1 *)) 0,	(ub2) 0, (ub1) SQLCS_IMPLICIT);		if ( fParentQuery->fErrorNo != OCI_SUCCESS) 		{			fclose(fileHandle);			fParentQuery->CheckError();		}		flushedAmount += nTry;		remainder -= nTry;		offset += nTry;		//incase the internal buffer is not big enough for the lob , flush the buffer content to db after some interval:		if (flushedAmount >= LOB_FLUSH_BUFFER_SIZE)		{			flushedAmount = 0;			fParentQuery->fErrorNo = OCILobFlushBuffer(fParentQuery->hSvc, fParentQuery->hErr, hBlob, OCI_LOB_BUFFER_NOFREE);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品一区二区三区四区 | 欧美丰满美乳xxx高潮www| 日本午夜一本久久久综合| 久久蜜臀精品av| 欧美日韩免费不卡视频一区二区三区| 国产另类ts人妖一区二区| 亚洲综合色网站| www国产精品av| 欧美特级限制片免费在线观看| 久久九九99视频| 成人教育av在线| 免费日本视频一区| 亚洲成人你懂的| 中文字幕日韩精品一区| 久久理论电影网| 欧美一卡二卡在线| 欧美日韩国产区一| 日本道精品一区二区三区| 国产成人av电影在线| 久久成人免费网| 日本欧美在线观看| 午夜伦理一区二区| 午夜精品久久久久| 一区二区三区欧美日| 国产精品成人免费| 国产精品国产三级国产a| 国产亚洲综合色| 久久久欧美精品sm网站| 精品久久久久久久人人人人传媒| 欧美欧美欧美欧美| 欧美视频在线一区二区三区| 日本二三区不卡| 91精彩视频在线| 色综合久久久久网| 色婷婷av一区| 精品女同一区二区| 国产剧情一区二区三区| 国产日产欧美一区| 久久欧美一区二区| 亚洲国产wwwccc36天堂| 一区二区在线观看av| 欧美电影在线免费观看| 在线不卡a资源高清| 欧美老人xxxx18| 欧美一级理论片| 欧美成人女星排名| 精品国产乱码久久久久久免费| 日韩视频免费观看高清完整版 | 欧美一区二区三区免费大片 | 国产不卡免费视频| 春色校园综合激情亚洲| 成人av在线一区二区三区| aaa欧美日韩| 欧美午夜精品一区| 日韩一级完整毛片| 久久久亚洲精品石原莉奈| 亚洲国产高清aⅴ视频| 亚洲人吸女人奶水| 无吗不卡中文字幕| 麻豆精品一区二区三区| 成人福利视频在线| 欧美在线一区二区三区| 日韩一区二区不卡| 久久久精品免费观看| 777欧美精品| 欧美精品一区二区三区在线| 国产色综合一区| 亚洲乱码精品一二三四区日韩在线| 亚洲综合区在线| 美女性感视频久久| 成人h动漫精品一区二| 欧美在线|欧美| 欧美成人a在线| 最新不卡av在线| 亚洲国产视频直播| 国产麻豆视频一区二区| av中文字幕在线不卡| 欧美日本精品一区二区三区| 欧美tk丨vk视频| 亚洲欧美另类综合偷拍| 奇米777欧美一区二区| 成人精品免费看| 欧美精品123区| 国产精品人妖ts系列视频| 亚洲国产一区二区视频| 国产精品综合av一区二区国产馆| 色综合天天综合给合国产| 日韩欧美一级在线播放| 综合中文字幕亚洲| 伦理电影国产精品| 色哟哟国产精品| 精品成人私密视频| 亚洲五码中文字幕| 成人免费毛片嘿嘿连载视频| 欧美人与禽zozo性伦| 欧美国产一区二区在线观看| 日韩在线卡一卡二| 色综合视频一区二区三区高清| 日韩欧美不卡在线观看视频| 国产精品久久久久久久裸模| 麻豆国产精品官网| 欧美专区日韩专区| 一区在线中文字幕| 国产一区999| 欧美一区永久视频免费观看| 亚洲乱码国产乱码精品精98午夜 | 91蜜桃在线观看| www国产成人免费观看视频 深夜成人网| 亚洲免费色视频| 成人在线一区二区三区| 日韩免费看网站| 亚洲国产精品久久久男人的天堂| 成人黄色小视频| 久久奇米777| 国产一区二区在线观看视频| 91麻豆精品国产91久久久使用方法| 亚洲欧美视频在线观看视频| 成人永久aaa| 国产日韩v精品一区二区| 久久国产精品区| 欧美一卡二卡在线观看| 调教+趴+乳夹+国产+精品| 在线观看日韩毛片| 亚洲欧洲制服丝袜| a亚洲天堂av| 中文字幕在线不卡| 成人国产亚洲欧美成人综合网| 久久亚洲综合色| 韩国v欧美v日本v亚洲v| 欧美mv和日韩mv的网站| 麻豆精品视频在线| 日韩美女视频在线| 蓝色福利精品导航| 精品久久久久香蕉网| 国产一区二区三区国产| 精品处破学生在线二十三| 国产一区二区三区精品欧美日韩一区二区三区| 日韩一区二区免费电影| 久久不见久久见免费视频7 | 欧美成人女星排名| 国产老肥熟一区二区三区| 国产拍欧美日韩视频二区| 成人ar影院免费观看视频| 成人欧美一区二区三区小说 | 久久久久久久一区| 床上的激情91.| 亚洲欧美日本韩国| 欧美老肥妇做.爰bbww| 欧美aⅴ一区二区三区视频| 精品剧情在线观看| 国产黄色精品视频| 国产精品乱码一区二区三区软件 | 国产在线视频不卡二| 久久久国产午夜精品 | 在线观看一区日韩| 亚洲va国产天堂va久久en| 日韩午夜在线观看视频| 国产一区亚洲一区| 亚洲国产精品精华液2区45| 91丨porny丨国产入口| 亚洲国产你懂的| 精品国产污污免费网站入口| 国产成人无遮挡在线视频| 亚洲欧美一区二区三区久本道91| 精品污污网站免费看| 精品无人区卡一卡二卡三乱码免费卡 | 欧美综合久久久| 日韩电影免费一区| 日韩欧美国产麻豆| 成人激情免费网站| 天涯成人国产亚洲精品一区av| 精品不卡在线视频| 91丝袜国产在线播放| 石原莉奈一区二区三区在线观看| 欧美本精品男人aⅴ天堂| 成人丝袜高跟foot| 丝袜美腿成人在线| 欧美极品美女视频| 欧美日韩你懂得| 国产精品91xxx| 亚洲成a人片综合在线| 国产调教视频一区| 欧美视频在线不卡| 国产精品123| 午夜不卡av免费| 日本一区二区不卡视频| 91精品国产91综合久久蜜臀| 99精品桃花视频在线观看| 日本三级韩国三级欧美三级| 中文字幕一区不卡| 2023国产精华国产精品| 欧美在线free| 不卡的av在线| 久久99久久99精品免视看婷婷| 亚洲区小说区图片区qvod| 国产午夜精品久久久久久免费视 | 一区二区三区在线免费| 亚洲精品一区在线观看| 欧美日本韩国一区| 色吊一区二区三区|