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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? tociquery.h

?? 調用OCI的C++類
?? H
字號:
#ifndef _OCIQuery_h#define _OCIQuery_h#include <oci.h>#include <stdio.h>#include "exception.h"//#define __DEBUG__typedef signed int dword;const int PREFETCH_ROWS = 200;						//預先提取n行數據到緩沖區,減少網絡流量const	int MAX_STRING_VALUE_LENGTH = 255;			//返回的字符串最大的列、返回過程參數長度const	int MAX_LOB_BUFFER_LENGTH = 1024;			//LOB數據緩沖區的最大空間const	int MAX_ERRMSG_LENGTH = 1024;					//錯誤信息的最大長度const	int MAX_SQLSTMT_LENGTH = 1024;				//出現錯誤的SQL語句長度//const	int MAX_PARAMS_COUNT = 100;						//參數最大數目const   int MAX_PARAMS_COUNT = 150;     //清單表結構大約100個字段 3.28修改const	int MAX_ERR_CAT_LENGTH = 50;					//錯誤分類長度const	int LOB_FLUSH_BUFFER_SIZE = 400*1024;		//LOB數據積累到此量時,寫入數據庫//error message definination:const	char* const ERR_GENERAL = "General Error: %s"; //throw TOCIException("TOCIQuery(TOCIDatabase &db)", ERR_GENERAL, "Can not declare a TOCIQuery when the database is not connected");const	char* const ERR_INDEX_OUT_OF_BOUND = "%s";    //throw TOCIException(fSqlStmt , ERR_INDEX_OUT_OF_BOUND, "field index out of bound when call Field(i)");	const	char* const ERR_DB_INIT = "OCI: OCI handles init fail in TDatabase constructor: @line:%d";const	char* const ERR_SET_LOGIN = "OCI: You can only set login infomation on disconnect status: line %d";const	char* const ERR_CONNECT_NO_LOGIN_INFO = "No login information provided before Connect(), call SetLogin first, line:%d";const	char* const ERR_NO_DATASET = "OCI: function:%s , Result Dataset is on Bof/Eof. field:%s"; //throw TOCIException(fParentQuery->fSqlStmt, ERR_NO_DATASET, "asBlobBuffer()", name);const	char* const ERR_DATA_TYPE_CONVERT = "Data type convertion error: field:%s data type:%d can not be access by %s"; //throw TOCIException(fParentQuery->fSqlStmt, ERR_DATA_TYPE_CONVERT, name, type, "asLobBuffer()");const	char* const ERR_NOMORE_MEMORY_BE_ALLOCATED = "no more memory can be allocate when :%s, source code:%d"; //throw TOCIException(fParentQuery->fSqlStmt, ERR_NOMORE_MEMORY_BE_ALLOCATED, "asBlobBuffer()", __LINE__);const	char* const ERR_FILE_IO = "%s: can not open file:%s"; //throw TOCIException(fParentQuery->fSqlStmt, ERR_FILE_IO, "loadFromFile()", fileName);const	char* const ERR_MEM_BUFFER_IO = "asBlobWriter() error: read from file to buffer, field:%s, file:%s, @line:%d"; //throw TOCIException(fParentQuery->fSqlStmt, ERR_MEM_BUFFER_IO, name, fileName, __LINE__);const	char* const ERR_DATA_TYPE_NOT_SUPPORT = "field:%s, datatype:%d not yet supported"; //, pCurrField->name,innerDataType);const	char* const ERR_PARAM_NOT_EXISTS = "param:%s does not exists."; //throw TOCIException(fSqlStmt, ERR_PARAM_NO_EXISTS, paramName, "check spelling error");const	char* const ERR_FIELD_NOT_EXISTS = "field:%s does not exists.";const	char* const ERR_INVALID_METHOD_CALL	= "%s: invalid call method:%s";const	char* const ERR_CAPABILITY_NOT_YET_SUPPORT = "capability not support yet:%s"; //例如參數個數超越范圍const	char* const ERR_READ_PARAM_DATA = "read parameter value data type error, parameter name:%s, method:%s";//const define:const char* const NULL_STRING = "";const int NULL_NUMBER = 0;/* classes defined in this file: */class TOCIException;class TOCIDatabase;class TOCIQuery;class TOCIField;class TOCIParam;class TOCISession;class TOCIDirPath;	//define in TOCIDirPath.hclass TOCIException : public TException{public:	char *getErrMsg() const;	char *getErrSrc() const;	int getErrCode() const;public:	TOCIException(sword errNumb, OCIError *err, char const *cat, char const *sql);//執行OCI函數發生的錯誤	TOCIException(const char *sql, const char* errFormat, ...);		~TOCIException();private:	char	errCategory[MAX_ERR_CAT_LENGTH+1];	//錯誤分類	text	errMessage[MAX_ERRMSG_LENGTH+1];		//錯誤信息	char	errSQL[MAX_SQLSTMT_LENGTH+1];			//發生錯誤的sql語句	int	errNo;										//錯誤號	int	m_iErrCode;};class TOCIDatabase{friend class TOCIQuery;friend class TOCISession;friend class TOCIDirPath;public:public:	TOCIDatabase();	~TOCIDatabase();	void setLogin(char *user, char *password, char *tnsString) ;	bool connect();	bool connect(char *usr, char *pwd, char *tns) ;	void disconnect();	void commit();	void rollback();	OCISession *hUser;	//OCISvcCtx *hSvc;						//服務	OCISvcCtx *hDBSvc;		//用于登錄鏈接服務器	private:	char *usr, *pwd, *tns;	//登錄名	bool fConnected;			//在Connect中是否連接成功	sword fErrorNo;						//錯誤號	void checkError() ;					//用于判斷當前的語句是否正確執行,如果有錯誤則把錯誤信息放入errMsg;		OCIError *hDBErr;		OCIEnv *hEnv;	OCIServer *hSvr;};class TOCIParam{friend class TOCIQuery;public:	~TOCIParam();	char	*name;	int		asInteger();	//讀取返回參數值	double	asFloat();	long		asLong();	char		*asString();	bool		isNULL();	TOCIParam();private:	ub2		dataType;		int		intValue;	double	dblValue;			//存儲輸入和輸出的值(緩沖區)	long		longValue;			//long數據緩沖區	char		*stringValue;		//字符串返回緩沖區		int    * intArray;    //INT數組	double * dblArray;    //DOUBLE數組	long   * longArray;  //LONG數組	char ** stringArray; //STRING數組	int   stringSize;    //string數組中的string大小		bool		fIsOutput;			//是否是輸出參數.默認是輸入參數	sb2		indicator;			//在返回值時候是否為空	OCIBind  *hBind;};class TOCIField{friend class TOCIQuery;public:		~TOCIField(); 	char	*name;				//字段名稱	long	size;					//數據長度	long	type;					//數據類型 in(INT_TYPE,FLOAT_TYPE,DATE_TYPE,STRING_TYPE,ROWID_TYPE)	int	precision;			//數值總長度	int	scale;				//數值中小數點個數	bool	nullable;			//字段定義時是否允許為空值--為了和其他的相一致	bool		isNULL();			//在fetch過程中該列的數據是否為空	char		*asString();	double	asFloat();	int		asInteger();	long		asLong();	//Blob處理	void		asBlobFile(const char *fileName);			//讀取到file中	void		loadFromFile(const char *fileName);			//寫入到blob中	void		loadFromBuffer(unsigned char *buf, unsigned int bufLength);	//把LOB的內容用緩沖區內容替代	void		asBlobBuffer(unsigned char* &buf, unsigned int *bufLength);	//保存到緩沖區,緩沖區的大小自動創建,并返回緩沖區大小*bufLength.		//日期處理	char		*asDateTimeString();	//把日期型的列以HH:MM:DD HH24:MI格式讀取,使用asString()讀取的日期型數據類型為HH:MM:DD	void		asDateTime(int &year, int &month, int &day, int &hour, int &minute, int &second); //返回日期的各個部分	TOCIField();private:	//日期處理	void		asDateTimeInternal(int &year, int &month, int &day, int &hour, int &minute, int &second); //返回日期的各個部分,沒有作其他校驗,只是內部調用						TOCIQuery *fParentQuery;					//指向該Field所屬于的Query	//數據緩沖區,分別為字符串、整數、浮點數分配空間	ub1	fStrBuffer[MAX_STRING_VALUE_LENGTH];	//用于保存轉換為字符串后的值	ub1	*fDataBuf;						//在分析字段時候獲得空間max(該列的最大長度,MAX_STRING_VALUE_LENGTH), 在Destructor中釋放	OCILobLocator *hBlob;				//支持LOB	sb2	*fDataIndicator;				//在defineByPos中使用,用于在fetch時察看是否有字段值返回、字段值是否被截斷;valueIsNULL, isTruncated根據此值獲得結果	ub2   fReturnDataLen;				//讀取數據時返回的真實長度	ub2	fInternalType;					//Oracle內部數據類型	ub2	fRequestType;					//在讀取數據時候的請求數據類型	OCIDefine *hDefine;					//用于讀取列信息	int	  iBlobBufCnt;					//支持LOB緩沖的長度};class TOCIQuery{friend class TOCIField;public:	//主要功能	void close();													//關閉SQL語句,以準備接收下一個sql語句	void setSQL(const char *inSqlstmt);								//設置Sqlstatement	void open(int prefetchRows=PREFETCH_ROWS);			//打開SQL SELECT語句返回結果集	bool next();													//移動到下一個記錄	bool execute(int iters=1);	                          //執行非SELECT語句,沒有返回結果集	bool commit();													//事務提交	bool rollback();												//事務回滾	int  rowsAffected() { return fTotalRowsFetched;};	//DELETE/UPDATE/INSERT語句修改的記錄數目	int  getSQLCode() { return fErrorNo;};				//返回Oracle執行結果代碼	//與列信息相關					int fieldCount();												//總共有幾個列	TOCIField& field(int index)		;						//返回第i個列信息	TOCIField& field(char const *fieldName) ;						//根據列名(不分大小寫)返回列信息; 建議使用Field(int i)獲得更高的效率		//與參數信息相關	int paramCount();	TOCIParam& param(int index);								//返回第i個列信息	TOCIParam& param(char *paramName);						//根據列名(不分大小寫)返回列信息; 建議使用Field(int i)獲得更高的效率																		//以下是設置參數值	void setParameter(const char *paramName, const char* paramValue, bool isOutput = false); 		void setParameter(const char *paramName, int paramValue, bool isOutput = false); 	void setParameter(const char *paramName, double paramValue, bool isOutput = false) ;	void setParameter(const char *paramName, long paramValue, bool isOutput = false);	void setParameterNULL(const char *paramName);	/* 新增 long raw 處理 */    void setLongRawParameter(char *paramName, char* paramValue, bool isOutput = false);	/* 新增 blob 處理 */    void setParameter(char *paramName, void* paramValue, int iLen,bool isOutput = false);    //數組操作	void setParamArray(char const *paramName, char ** paramValue,int iStructSize,int iStrSize ,bool isOutput = false); 		void setParamArray(char const *paramName, int * paramValue,int iStructSize, bool isOutput = false); 	void setParamArray(char const *paramName, double * paramValue, int iStructSize,bool isOutput = false) ;	void setParamArray(char const *paramName, long * paramValue, int iStructSize,bool isOutput = false);	/* 新增blob處理 */	void setParamArray(char const *paramName, void ** paramValue,int iStructSize,int iStrSize,  bool isOutput=false);	//constructor & destructor	TOCIQuery(TOCIDatabase *oradb);	TOCIQuery(TOCIDatabase *oradb,TOCISession *session);	~TOCIQuery();	private:	char *fSqlStmt;						//保存open的Select語句,可以方便調試	ub2 fStmtType;							//***ub2!!! 保存sqlstmt的類型:SELECT/UPDATE/DELETE/INSERT/CREATE/BEGIN/ALTER...	bool fActivated;						//是否已經處于打開狀態,在調用OCIStmtPrepare成功后為True	unsigned	fFetched;					//0..prefetchRows	unsigned	fPrefetchRows;				//1.. 	unsigned	fCurrRow;					//0..fetched */	unsigned	fTotalRowsFetched;		//rows fetched from the start	int fFieldCount;						//字段個數	TOCIDatabase *db;						//此query屬于哪個Dabase,在Constructor中創建	TOCIField *fieldList;				//在內部保存的所有字段信息	void getFieldsDef();					//獲得字段信息,并為字段分配取值的緩沖區	TOCIParam *paramByName(const char *paramName);//在內部使用,直接返回參數的指針		void checkError() ;					//用于判斷當前的語句是否正確執行,如果有錯誤則把錯誤信息放入errMsg;	int fParamCount;						//參數個數	TOCIParam *paramList;				//所有參數設置的信息	void getParamsDef();					//在setSQL時候獲得參數信息	int nTransTimes;						//是否曾經執行過Execute()事務操作,以便與回滾.	//OCITrans* hTrans;	OCIStmt *hStmt;						//用于分析sql語句的handle	OCIError *hErr;						//錯誤處理	sword fErrorNo;						//錯誤號	bool fEof;								//在Fetch時候,已經達到最后一個記錄,防止已經讀到最后一個記錄后,又fetch發生的錯誤	bool fBof;								//在Open()時候為True,在Next()如果有數據為false;用于判斷用戶是否可以從緩沖區中讀取列值,該部分尚未完成	bool fOpened;							//數據集是否打開	#ifdef __DEBUG__    bool bExecuteFlag;#endif};class TOCISession{	public:	TOCISession(TOCIDatabase *pDB);	~TOCISession();		void sessionBegin();	void sessionEnd();private:		OCISvcCtx	*m_hSrvCtx;	OCISession	*m_hSession;	OCIError	*m_hError;		bool	m_bActive;		int	m_iErrorNo;		void checkError();friend	class TOCIDirPath;friend  class TOCIQuery;	};#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
黄色精品一二区| 国产成人综合在线观看| 国产午夜精品久久久久久久| 99r精品视频| 九色|91porny| 亚洲午夜免费视频| 中文字幕的久久| 日韩视频一区二区| 欧美在线观看视频一区二区三区| 国产精品1024| 美女任你摸久久| 亚洲综合自拍偷拍| 日本一区二区成人| 69堂成人精品免费视频| 色综合久久久久综合体| 成人免费观看男女羞羞视频| 九九九精品视频| 天使萌一区二区三区免费观看| 国产精品网站在线观看| 久久久高清一区二区三区| 欧美精品视频www在线观看| 一本一本久久a久久精品综合麻豆| 国产一区二区三区久久悠悠色av| 日本不卡一区二区三区高清视频| 亚洲综合小说图片| 综合欧美亚洲日本| 中日韩av电影| 久久久精品黄色| 日韩欧美一二区| 91精品婷婷国产综合久久| 97久久精品人人做人人爽50路| 春色校园综合激情亚洲| 国产乱国产乱300精品| 国内偷窥港台综合视频在线播放| 日本女人一区二区三区| 青青草国产精品97视觉盛宴| 亚洲成国产人片在线观看| 亚洲福利视频三区| 夜夜爽夜夜爽精品视频| 亚洲综合丁香婷婷六月香| 亚洲黄色在线视频| 亚洲乱码中文字幕| 一区二区三区精品久久久| 夜夜嗨av一区二区三区中文字幕 | 天堂久久一区二区三区| 亚洲精品视频在线| 亚洲国产日韩av| 五月天久久比比资源色| 日本女人一区二区三区| 蜜桃视频一区二区| 国内精品久久久久影院色| 国产精选一区二区三区 | 在线视频你懂得一区| 色吧成人激情小说| 欧美视频一区在线观看| 欧美精品乱码久久久久久| 日韩一区二区三区av| 精品国产一区二区三区久久久蜜月| 日韩欧美色综合| 精品91自产拍在线观看一区| 中文字幕av一区 二区| 亚洲女人****多毛耸耸8| 亚洲成a人片在线不卡一二三区| 日韩国产成人精品| 国产一区二区三区视频在线播放| 国产成人av电影| 在线精品视频免费观看| 91.xcao| 26uuu久久天堂性欧美| 国产精品美女久久久久久| 玉米视频成人免费看| 青青草97国产精品免费观看无弹窗版| 麻豆久久久久久| a美女胸又www黄视频久久| 欧美性三三影院| 26uuu亚洲综合色| 国产精品日日摸夜夜摸av| 亚洲一区二区三区在线看| 精品无人码麻豆乱码1区2区| 成人黄色av网站在线| 欧美日韩国产乱码电影| 精品国产一区二区三区忘忧草| 国产精品国产精品国产专区不片| 亚洲成人在线免费| 国产麻豆视频精品| 欧美午夜精品理论片a级按摩| 久久婷婷久久一区二区三区| 一区二区久久久久| 国内久久婷婷综合| 欧美在线视频全部完| 国产亚洲成年网址在线观看| 亚洲国产综合在线| 国产69精品久久777的优势| 欧美精品欧美精品系列| 最新欧美精品一区二区三区| 美女脱光内衣内裤视频久久影院| 99久久国产综合精品麻豆 | 亚洲视频在线一区二区| 美腿丝袜一区二区三区| 91国产福利在线| 中文字幕av一区 二区| 麻豆成人在线观看| 91福利在线导航| 亚洲国产激情av| 激情五月激情综合网| 欧美理论片在线| 亚洲欧洲韩国日本视频| 国产精品一二三四区| 日韩午夜激情视频| 亚洲国产乱码最新视频 | 国产精品进线69影院| 狠狠狠色丁香婷婷综合激情| 欧美性xxxxxxxx| 亚洲日本在线天堂| 国产v综合v亚洲欧| 精品国产91久久久久久久妲己 | 久久精品免费看| 欧美精品少妇一区二区三区| 亚洲精品国产a| 99久久免费视频.com| 久久婷婷一区二区三区| 久久精品av麻豆的观看方式| 91精品国产aⅴ一区二区| 一区二区成人在线| 色综合视频在线观看| 中文字幕一区二区视频| 成人综合激情网| 久久精品人人做| 国内精品自线一区二区三区视频| 日韩精品在线网站| 奇米精品一区二区三区在线观看一 | 久久国产精品露脸对白| 欧美一区二区三区啪啪| 日韩av一区二| 欧美电视剧在线观看完整版| 男女性色大片免费观看一区二区| 91精品国产入口在线| 日韩va欧美va亚洲va久久| 日韩视频一区二区三区 | 久久精品国产99| 26uuu久久综合| 国产在线精品一区二区三区不卡| 精品日韩欧美在线| 国产精品原创巨作av| 国产亚洲短视频| 成人av先锋影音| 亚洲精品亚洲人成人网| 欧美性猛交xxxxxxxx| 午夜精品福利视频网站| 欧美tk—视频vk| 国产传媒日韩欧美成人| 亚洲人精品午夜| 欧美日韩视频在线第一区| 日韩av一区二区在线影视| 精品欧美乱码久久久久久1区2区| 国内成人免费视频| 国产精品女人毛片| 欧美在线观看视频一区二区 | 欧美亚洲综合色| 午夜欧美大尺度福利影院在线看| 欧美一区二区女人| 国产成人啪免费观看软件 | 国产精品综合网| 亚洲欧美中日韩| 欧美日韩小视频| 国产一区二区美女| 亚洲精品日产精品乱码不卡| 3atv一区二区三区| 国产福利91精品一区| 亚洲狼人国产精品| 欧美成人a∨高清免费观看| 成人午夜视频福利| 午夜激情综合网| 久久精品夜色噜噜亚洲aⅴ| 色综合久久久久网| 蜜臀a∨国产成人精品| 国产精品女人毛片| 制服.丝袜.亚洲.中文.综合 | 欧美精品色一区二区三区| 国产一区在线视频| 洋洋av久久久久久久一区| 精品裸体舞一区二区三区| 91日韩一区二区三区| 精品一区二区三区久久久| 亚洲婷婷综合色高清在线| 日韩一区二区免费视频| 色综合久久66| 国产精品一区不卡| 丝袜美腿高跟呻吟高潮一区| 中文无字幕一区二区三区| 欧美一区二区精美| 91国偷自产一区二区开放时间| 国产在线精品视频| 亚洲不卡在线观看| 国产精品素人视频| 精品人伦一区二区色婷婷| 欧美三级日韩在线| 成人av动漫在线| 国产在线精品免费| 蜜桃一区二区三区在线|