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

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

?? easy_odbc.h

?? VC++中
?? H
字號(hào):
// easy_odbc.h
// defines C++ wrappers for win32 ODBC function calls
// Author: Vijay Mathew Pandyalakal
// 27-MAY-2003

#if !defined _EASY_ODBC_H_ 
#define _EASY_ODBC_H_ 5000

#include <windows.h>
#include <sql.h>
#include <sqlext.h>

#include <string.h>

#include <vector>
using namespace std;

namespace easyodbc {
	// classes decalred here
	class Database;
	class EasyODBCException;
	class ResultSet;
	class ResultSetMetaData;
	struct Column;

	// @class Database
	// wraps a connection with an 
	// ODBC datasource
	class Database {
	private:
		SQLHENV m_hEnv; // environment handle
		SQLHDBC m_hDbc; // database handle
		SQLHSTMT m_hStmt; // statement handle

		int m_nConnTimeOut; // connection timeout
		bool m_bOpened;

		// Error handling 
		SQLSMALLINT m_iRec;
		SQLTCHAR m_cState[6];
		SQLTCHAR m_cMsg[SQL_MAX_MESSAGE_LENGTH];
		SQLINTEGER m_nErr;
		SQLSMALLINT m_nMsg;

	public:
		// cursor types
		static int db_dynamic;
		static int db_static;
		static int db_keysetdriven;
		static int db_forwardonly;

	public:
		Database() {
			this->m_hEnv = NULL;
			this->m_hDbc = NULL;
			this->m_hStmt = NULL;
			this->m_nConnTimeOut = 10;
			this->m_bOpened = false;
			this->m_iRec = 1;
		}
		/** ODBC related functions **/
		bool Open(const char* dsn,char* user = NULL,
					char* pw = NULL); // opens a database connection	
		long Execute(const char* sql);
		ResultSet ExecuteQuery(const char* sql);
		ResultSet ExecuteQuery(const char* sql,int cursor_type,bool scrollable);

		bool Commit();
		bool Rollback();

		void Close() {
			if(m_bOpened) {
				SQLFreeStmt(this->m_hStmt,SQL_CLOSE);
				SQLDisconnect(this->m_hDbc);
				SQLFreeConnect(this->m_hDbc);
				SQLFreeEnv(this->m_hEnv);
				this->m_bOpened = false;
			}
		}
		~Database() { Close(); }

		/**		**/

		void SetTimeout(int n) {
			this->m_nConnTimeOut = n;
		}
		int GetTimeout() { return this->m_nConnTimeOut; }
		bool IsOpened() { return m_bOpened; }

	private:
		void HandleError(const char* type);
	};

	// @struct Column
	// to be used by ResultSetMetaData
	struct Column {
		char title[51];
		int type;
		unsigned int size;
		int decim_size;
		int nullable; // 0: NOT-NULL,1: NULL,2: NOT-KNOWN
	};

	// @class ResultSet
	// handles data returned by a SELECT
	class ResultSet {
	private:
		SQLHSTMT *m_hStmt;	
		SQLUINTEGER  m_lNumRows;
		SQLUSMALLINT   m_nRowStatusArray[10]; 

		// Error handling 
		SQLSMALLINT m_iRec;
		SQLTCHAR m_cState[6];
		SQLTCHAR m_cMsg[SQL_MAX_MESSAGE_LENGTH];
		SQLINTEGER m_nErr;
		SQLSMALLINT m_nMsg;

	public:
		ResultSet(SQLHSTMT *stmt) {
			this->m_hStmt = stmt;		
			this->m_lNumRows = 0;
			SQLRETURN rc = SQLSetStmtAttr(*this->m_hStmt, SQL_ATTR_ROW_STATUS_PTR, 
				m_nRowStatusArray, 0);
			rc = SQLSetStmtAttr(*this->m_hStmt,SQL_ATTR_ROWS_FETCHED_PTR, 
				&m_lNumRows, 0);
			this->m_iRec = 1;
		}
		ResultSetMetaData GetMetaData();
		bool MoveNext();
		bool MovePrevious();
		bool MoveFirst();
		bool MoveLast();
		bool Bind(int col_no,char* buff,int buff_len);

		SQLUINTEGER  GetNumRows() { return m_lNumRows; }

	private:
		void HandleError();
	};

	// @class ResultSetMetaData
	// contains data about a ResultSet
	class ResultSetMetaData {
	private:
		int m_nNumCols; // number of columns in the ResultSet
		vector<Column> m_vctCols;
	public:
		ResultSetMetaData() { m_nNumCols = 0; }
		void SetNumCols(int n) { m_nNumCols = n; }
		int GetColumnCount() { return m_nNumCols; }
		void AddColumn(Column col) { 

			m_vctCols.push_back(col); 
		}
		bool GetColumn(int n,Column *ret) { 
			if(m_vctCols.size() <= 0) return false;
			int i = n;
			i--;
			if(i<0) i = 0;
			*ret = m_vctCols[i]; 
			return true;
		}
		bool GetColumn(const char* title,Column* ret) {
			int sz = m_vctCols.size();
			Column c;
			for(int i=0;i<sz;i++) {
				c = m_vctCols[i];
				if(strcmpi(c.title,title) == 0) {
					*ret = c;
					return true;
				}
			}
			return false;
		}
		void TypeToString(int type,char* ret) {
			try {
				switch(type) {
				case SQL_CHAR:
					strcpy(ret,"CHAR");
					break;
				case SQL_VARCHAR:
					strcpy(ret,"VARCHAR");
					break;
				case SQL_LONGVARCHAR:
					strcpy(ret,"LONG VARCHAR");
					break;
				case SQL_WCHAR:
					strcpy(ret,"UNICODE CHAR");
					break;
				case SQL_WVARCHAR:
					strcpy(ret,"UNICODE VARCHAR");
					break;
				case SQL_WLONGVARCHAR:
					strcpy(ret,"UNICODE LONG VARCHAR");
					break;
				case SQL_DECIMAL:
					strcpy(ret,"DECIMAL");
					break;
				case SQL_NUMERIC:
					strcpy(ret,"NUMERIC");
					break;
				case SQL_SMALLINT:
					strcpy(ret,"SMALLINT");
					break;
				case SQL_INTEGER:
					strcpy(ret,"INTEGER");
					break;
				case SQL_REAL:
					strcpy(ret,"REAL");
					break;
				case SQL_FLOAT:
					strcpy(ret,"FLOAT");
					break;
				case SQL_DOUBLE:
					strcpy(ret,"DOUBLE");
					break;
				case SQL_BIT:
					strcpy(ret,"BIT");
					break;
				case SQL_TINYINT:
					strcpy(ret,"TINYINT");
					break;
				case SQL_BIGINT:
					strcpy(ret,"BIGINT");
					break;
				case SQL_BINARY:
					strcpy(ret,"BINARY");
					break;
				case SQL_VARBINARY:
					strcpy(ret,"VARBINARY");
					break;
				case SQL_LONGVARBINARY:
					strcpy(ret,"LONG VARBINARY");
					break;
				case SQL_TYPE_DATE:
				case SQL_DATE:
					strcpy(ret,"DATE");
					break;
				case SQL_TYPE_TIME:
				case SQL_TIME:
					strcpy(ret,"TIME");
					break;
				case SQL_TYPE_TIMESTAMP:
				case SQL_TIMESTAMP:
					strcpy(ret,"TIMESTAMP");
					break;
				case SQL_INTERVAL_MONTH:
					strcpy(ret,"INTERVAL MONTH");
					break;
				case SQL_INTERVAL_YEAR:
					strcpy(ret,"INTERVAL YEAR");
					break;
				case SQL_INTERVAL_YEAR_TO_MONTH:
					strcpy(ret,"INTERVAL YEAR TO MONTH");
					break;
				case SQL_INTERVAL_DAY:
					strcpy(ret,"INTERVAL DAY");
					break;
				case SQL_INTERVAL_HOUR:
					strcpy(ret,"INTERVAL HOUR");
					break;
				case SQL_INTERVAL_MINUTE:
					strcpy(ret,"INTERVAL MINUTE");
					break;
				case SQL_INTERVAL_SECOND:
					strcpy(ret,"INTERVAL SECOND");
					break;
				case SQL_INTERVAL_DAY_TO_HOUR:
					strcpy(ret,"INTERVAL DAY TO HOUR");
					break;
				case SQL_INTERVAL_DAY_TO_MINUTE:
					strcpy(ret,"INTERVAL DAY TO MINUTE");
					break;
				case SQL_INTERVAL_DAY_TO_SECOND:
					strcpy(ret,"INTERVAL DAY TO SECOND");
					break;
				case SQL_INTERVAL_HOUR_TO_MINUTE:
					strcpy(ret,"INTERVAL HOUR TO MINUTE");
					break;
				case SQL_INTERVAL_HOUR_TO_SECOND:
					strcpy(ret,"INTERVAL HOUR TO SECOND");
					break;
				case SQL_INTERVAL_MINUTE_TO_SECOND:
					strcpy(ret,"INTERVAL MINUTE TO SECOND");
					break;
				case SQL_GUID:
					strcpy(ret,"GUID");
					break;
				default:
					strcpy(ret,"UNKNOWN");
				}
			}catch(...) {
				strcpy(ret,"-1");
			}
		}
		void NullableToString(int nullable,char* ret) {
			try {
				switch(nullable) {
				case 1:
					strcpy(ret,"NULL");
					break;
				case 0:
					strcpy(ret,"NOT NULL");
					break;
				default:
					strcpy(ret,"UNKNOWN");
				}
			}catch(...) {
				strcpy(ret,"-1");
			}
		}
		~ResultSetMetaData() {
			try {
				m_vctCols.clear();
			}catch(...) { }
		}

	};


	// @class EasyODBCException
	// simple exception handling
	class EasyODBCException {
	private:
		char m_strErrMsg[81];
		int m_nErrCode;
	public:
		EasyODBCException(const char* msg,int code) {
			strcpy(this->m_strErrMsg,msg);
			this->m_nErrCode = code;
		}
		void GetMessage(char* buff) {
			strcpy(buff,this->m_strErrMsg);
		}
		int GetCode() {
			return this->m_nErrCode;
		}
	};
}


#endif

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美经典三级视频一区二区三区| 蜜臂av日日欢夜夜爽一区| 国产一区不卡精品| 精品国产成人系列| 国内精品国产成人国产三级粉色| 精品福利一二区| 国产成人精品一区二区三区四区| 久久精品亚洲国产奇米99| 成人精品免费网站| 亚洲人成网站在线| 精品视频一区二区三区免费| 日本不卡视频一二三区| 精品国产成人系列| 9久草视频在线视频精品| 亚洲免费观看在线观看| 欧美精品一二三四| 精品一区二区三区在线观看国产 | 麻豆精品在线播放| 欧美成人女星排名| caoporn国产一区二区| 亚洲国产aⅴ成人精品无吗| 日韩三级视频中文字幕| 国产精品一卡二卡在线观看| 亚洲色图另类专区| 日韩视频在线观看一区二区| 丁香亚洲综合激情啪啪综合| 亚洲男人的天堂在线aⅴ视频| 欧美精品日韩精品| 成人免费视频视频在线观看免费| 一区二区三区四区在线| 欧美α欧美αv大片| 91浏览器入口在线观看| 琪琪久久久久日韩精品| 中文字幕精品一区| 日韩欧美一级在线播放| 91农村精品一区二区在线| 久久aⅴ国产欧美74aaa| 一区二区三区 在线观看视频| 精品国产91亚洲一区二区三区婷婷| 99精品在线观看视频| 日本视频一区二区三区| 国产精品成人免费在线| 欧美一级欧美三级| 色妞www精品视频| 国产一区二区精品久久| 婷婷久久综合九色综合伊人色| 中文字幕久久午夜不卡| 日韩欧美亚洲一区二区| 欧美性videosxxxxx| 国产精品一区二区久久精品爱涩| 首页综合国产亚洲丝袜| 亚洲欧美一区二区三区国产精品| 久久久久久免费网| 日韩一区二区在线播放| 在线一区二区三区四区| www.日韩大片| 国产激情视频一区二区在线观看| 日韩在线卡一卡二| 一区二区在线观看视频| 中文幕一区二区三区久久蜜桃| 日韩视频免费观看高清在线视频| 欧美日韩国产欧美日美国产精品| gogo大胆日本视频一区| 国产成a人亚洲精品| 韩国理伦片一区二区三区在线播放| 五月婷婷色综合| 亚洲一区在线电影| 亚洲综合色丁香婷婷六月图片| 国产精品视频在线看| 久久久久久久综合色一本| 精品欧美一区二区三区精品久久 | 久久综合网色—综合色88| 欧美精品 国产精品| 欧美午夜精品一区二区蜜桃| 色视频欧美一区二区三区| 91在线观看下载| 91麻豆国产精品久久| 91香蕉视频在线| 色婷婷激情久久| 欧美在线观看禁18| 精品视频在线视频| 欧美日韩电影在线| 日韩午夜在线播放| 精品久久久久一区| 久久看人人爽人人| 国产亚洲欧洲一区高清在线观看| 国产视频亚洲色图| 综合欧美亚洲日本| 亚洲一区国产视频| 轻轻草成人在线| 国产专区欧美精品| 成人一级黄色片| 色综合天天综合在线视频| 色88888久久久久久影院按摩| 一本色道**综合亚洲精品蜜桃冫| 色哟哟亚洲精品| 欧美日本一区二区| 日韩精品一区二| 国产欧美精品一区| 亚洲欧美视频在线观看视频| 亚洲午夜在线电影| 蓝色福利精品导航| 成人一区在线看| 欧美日韩国产影片| 精品少妇一区二区三区| 国产视频视频一区| 午夜欧美大尺度福利影院在线看| 美女一区二区三区| 波多野结衣中文一区| 在线观看欧美日本| 精品国产乱码久久| 亚洲黄色av一区| 精品综合免费视频观看| 高清成人在线观看| 欧美日韩日本视频| 国产欧美一区二区精品秋霞影院| 亚洲激情av在线| 精品在线免费视频| 91蜜桃网址入口| 精品欧美久久久| 亚洲乱码中文字幕| 黄色精品一二区| 欧美亚洲高清一区二区三区不卡| 精品日韩欧美在线| 亚洲三级电影网站| 黄页网站大全一区二区| 欧美亚洲一区二区在线| 国产午夜精品一区二区三区视频| 午夜视黄欧洲亚洲| 成人h动漫精品一区二区| 欧美日韩另类国产亚洲欧美一级| 国产欧美久久久精品影院| 午夜激情综合网| 成人av免费在线观看| 日韩三级视频在线看| 亚洲综合999| 成人中文字幕合集| 精品国产免费视频| 亚洲国产精品精华液网站| 成人永久aaa| 久久人人超碰精品| 毛片av一区二区三区| 欧美日韩成人在线| 亚洲欧美日韩一区二区三区在线观看 | 成人爽a毛片一区二区免费| 欧美一区二区观看视频| 亚洲免费三区一区二区| 成人精品鲁一区一区二区| 欧美一级欧美一级在线播放| 一区二区三区四区激情| 不卡av在线网| 中文字幕中文字幕一区二区| 国产一区二区三区四区在线观看| 日韩丝袜美女视频| 日韩精品成人一区二区在线| 在线精品国精品国产尤物884a| 国产精品国产成人国产三级| 国产精品亚洲综合一区在线观看| 欧美一级电影网站| 日韩精品福利网| 欧美另类z0zxhd电影| 亚洲一二三四久久| 欧美性xxxxxx少妇| 丝袜美腿成人在线| 日韩一级黄色片| 麻豆精品一区二区三区| 日韩精品中文字幕在线一区| 美女尤物国产一区| 亚洲免费电影在线| 91在线一区二区三区| 亚洲欧美日韩一区二区 | 国产成人高清在线| 国产偷国产偷亚洲高清人白洁| 国产高清不卡一区二区| 中文字幕精品一区二区精品绿巨人| 国产成人一级电影| 国产精品福利一区| 91香蕉国产在线观看软件| 国产精品久久久久久久久久久免费看 | 韩国成人精品a∨在线观看| 亚洲精品在线观| 成人一区二区三区| 亚洲一区二三区| 7777精品伊人久久久大香线蕉经典版下载 | 国产一区二区三区免费播放| 精品日韩一区二区三区免费视频| 精品一区二区免费| 国产精品色婷婷久久58| 色综合久久久久综合99| 性久久久久久久久| 精品少妇一区二区三区在线播放 | 久久久国际精品| 99热精品国产| 亚洲二区在线视频| 欧美成人精品1314www| 国产精品亚洲综合一区在线观看| 亚洲天堂2014| 69堂国产成人免费视频| 国产一区三区三区| 亚洲伦理在线免费看|