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

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

?? easy_odbc.cpp

?? VC++中
?? CPP
字號:
// easy_odbc.cpp
// declares C++ wrappers for win32 ODBC function calls
// Author: Vijay Mathew Pandyalakal
// 27-MAY-2003

#include "easy_odbc.h"
using namespace easyodbc;

int Database::db_dynamic = SQL_CURSOR_DYNAMIC;
int Database::db_keysetdriven = SQL_CURSOR_KEYSET_DRIVEN;
int Database::db_static = SQL_CURSOR_STATIC;
int Database::db_forwardonly = SQL_CURSOR_FORWARD_ONLY;

// @class Database implementations

// $bool Open(const char* dsn,const char* user = NULL,const char* pw = NULL)
// opens a database connection
// throws EasyODBCException
bool Database::Open(const char* dsn,char* user,char* pw) {
	SQLRETURN ret = 0;
	try {
		if(user == NULL) strcpy(user,"");
		if(pw == NULL) strcpy(pw,"");
		ret = SQLAllocEnv(&this->m_hEnv);
		if(ret == SQL_ERROR) {
			HandleError("ENV");
		}else if(ret == SQL_INVALID_HANDLE || ret < 0) {
			HandleError("ENV");
		}
	}catch(...) { HandleError("ENV"); }

	try {
		ret = SQLAllocConnect(this->m_hEnv, &this->m_hDbc);// allocates memory for ODBC
		if(ret == SQL_ERROR) {
			HandleError("ENV");
		}else if(ret == SQL_INVALID_HANDLE || ret < 0) {
			HandleError("ENV");
		}
	}catch(...) { HandleError("ENV"); }

		/*SQLSetConnectAttr(this->m_hDbc, SQL_LOGIN_TIMEOUT, 
			(void*)&this->m_nConnTimeOut, 0);// sets timeout*/

	try {
		ret = SQLConnect(this->m_hDbc,(SQLCHAR*)dsn,strlen(dsn),
			(SQLCHAR*)user,strlen(user),(SQLCHAR*)pw,strlen(pw));// connects to the ODBC driver
		if(ret == SQL_ERROR || ret == SQL_INVALID_HANDLE || ret < 0) {
			HandleError("DBC");
		}

		ret = SQLAllocStmt(this->m_hDbc, &this->m_hStmt);
		if(ret == SQL_ERROR || ret == SQL_INVALID_HANDLE || ret < 0) {
			HandleError("DBC");
		}
		this->m_bOpened = true;
		return true;
	}catch(...) { HandleError("DBC"); }
	return false;
}

// $long Execute(const char* sql) 
// execute any INSERT,DELETE,UPDATE statements
long Database::Execute(const char* sql) {
	try {
		if(!this->m_bOpened) {
			throw EasyODBCException("Call Open() before Execute()",-1);
		}
		SQLRETURN ret = SQLPrepare(this->m_hStmt,(unsigned char*)sql,
			SQL_NTS);//strlen(sql));
		if(ret == SQL_ERROR) {
			HandleError("STMT");
		}
		ret = SQLExecute(this->m_hStmt);//,(SQLCHAR*)sql,strlen(sql));

		if(ret == SQL_ERROR || ret < 0) {
			HandleError("STMT");
		}

		long count = -1;
		ret = SQLRowCount(this->m_hStmt,&count);
		return count;
	}catch(...) {
		HandleError("STMT");
	}
	return -2;
}

// $ResultSet ExecuteQuery(const char* sql) 
// execute SELECT statements
ResultSet Database::ExecuteQuery(const char* sql) {	
	try {
		if(!this->m_bOpened) {
			throw EasyODBCException("Connection not opened",-1);
		}				
		SQLFreeStmt(this->m_hStmt,SQL_CLOSE);
		SQLRETURN ret = SQLAllocStmt(this->m_hDbc, &this->m_hStmt);
		if(ret == SQL_ERROR || ret == SQL_INVALID_HANDLE || ret < 0) {
			HandleError("DBC");
		}
		ret = SQLSetStmtAttr(this->m_hStmt, SQL_ATTR_CURSOR_TYPE,
			(SQLPOINTER)SQL_CURSOR_DYNAMIC,SQL_IS_INTEGER);
		if(ret < 0) {
			HandleError("STMT");
		}
		/*ret = SQLSetStmtAttr(this->m_hStmt, SQL_ATTR_CURSOR_SCROLLABLE,
                        (SQLPOINTER)SQL_SCROLLABLE,
                        SQL_IS_INTEGER);
		if(ret < 0) {
			HandleError("STMT");
		}*/
		ret = SQLExecDirect(this->m_hStmt,(SQLTCHAR*)sql,strlen(sql));
		if(ret == SQL_ERROR) {
			HandleError("STMT");
		}
	}catch(...) { HandleError("STMT"); }
	ResultSet rslt(&this->m_hStmt);
	return rslt;
}

// $ResultSet ExecuteQuery(const char* sql) 
// execute SELECT statements
ResultSet Database::ExecuteQuery(const char* sql,int cursor_type,bool scrollable) {	
	try {
		if(!this->m_bOpened) {
			throw EasyODBCException("Connection not opened",-1);
		}					
		if(cursor_type != Database::db_dynamic &&
			cursor_type != Database::db_forwardonly &&
			cursor_type != Database::db_keysetdriven &&
			cursor_type != Database::db_static) {
			throw EasyODBCException("Invalid cursor type",-1);
		}
		SQLFreeStmt(this->m_hStmt,SQL_CLOSE);
		SQLRETURN ret = SQLAllocStmt(this->m_hDbc, &this->m_hStmt);
		if(ret == SQL_ERROR || ret == SQL_INVALID_HANDLE || ret < 0) {
			HandleError("DBC");
		}
		ret = SQLSetStmtAttr(this->m_hStmt, SQL_ATTR_CURSOR_TYPE,
			(SQLPOINTER)cursor_type,SQL_IS_INTEGER);
		if(ret < 0) {
			HandleError("STMT");
		}
		if(scrollable) {
			ret = SQLSetStmtAttr(this->m_hStmt, SQL_ATTR_CURSOR_SCROLLABLE,
                        (SQLPOINTER)SQL_SCROLLABLE,
                        SQL_IS_INTEGER);
			if(ret < 0) {
				HandleError("STMT");
			}
		}
		ret = SQLExecDirect(this->m_hStmt,(SQLTCHAR*)sql,strlen(sql));
		if(ret == SQL_ERROR) {
			HandleError("STMT");
		}
	}catch(...) { HandleError("STMT"); }
	ResultSet rslt(&this->m_hStmt);
	return rslt;
}


bool Database::Commit() {
	SQLRETURN ret = SQLEndTran(SQL_HANDLE_DBC,this->m_hDbc,SQL_COMMIT);
	if(ret == SQL_ERROR || ret == SQL_INVALID_HANDLE) {
		throw EasyODBCException("Commit failed",ret);
	}
	return true;
}

bool Database::Rollback() {
	SQLRETURN ret = SQLEndTran(SQL_HANDLE_DBC,this->m_hDbc,SQL_ROLLBACK);
	if(ret == SQL_ERROR || ret == SQL_INVALID_HANDLE) {
		throw EasyODBCException("Rollback failed",ret);
	}
	return true;
}

void Database::HandleError(const char* type) {
	try {
		if(strcmp(type,"STMT") == 0) {
			SQLGetDiagRec(SQL_HANDLE_STMT,this->m_hStmt,this->m_iRec,
			this->m_cState,&this->m_nErr,this->m_cMsg,
			sizeof(m_cMsg),&this->m_nMsg);		
		}else if(strcmp(type,"ENV") == 0) {
			SQLGetDiagRec(SQL_HANDLE_ENV,this->m_hEnv,this->m_iRec,
			this->m_cState,&this->m_nErr,this->m_cMsg,
			sizeof(m_cMsg),&this->m_nMsg);		
		}else if(strcmp(type,"DBC") == 0) {
			SQLGetDiagRec(SQL_HANDLE_DBC,this->m_hDbc,this->m_iRec,
			this->m_cState,&this->m_nErr,this->m_cMsg,
			sizeof(m_cMsg),&this->m_nMsg);		
		}
	}catch(...) {
		throw EasyODBCException("Database error",0);
	}

	throw EasyODBCException((char*)this->m_cMsg,this->m_nErr);
}

// @class ResultSet implementations

// $ResultSetMetaData GetMetaData()
// returns data about the selected data
ResultSetMetaData ResultSet::GetMetaData() {
	ResultSetMetaData mtdt;
	try {
		SQLSMALLINT column_count = 0;
		SQLRETURN ret = SQLNumResultCols(*this->m_hStmt,&column_count);
		if(ret == SQL_ERROR || ret == SQL_INVALID_HANDLE) {
			HandleError();
		}			
		mtdt.SetNumCols(column_count);
		for(int i=1;i<=column_count;i++) {
			Column col;
			int name_length = 0;
			strcpy(col.title,"");
			col.decim_size = 0;
			col.nullable = 0;
			col.size = 0;
			col.type = 0;
			ret =  SQLDescribeCol(*this->m_hStmt,(SQLSMALLINT)i,
						(SQLCHAR*)col.title,
						(SQLSMALLINT)sizeof(col.title),
						(SQLSMALLINT*)&name_length,
						(SQLSMALLINT*)&col.type,
						(SQLUINTEGER*)&col.size,
						(SQLSMALLINT*)&col.decim_size,
						(SQLSMALLINT*)&col.nullable);			
			if(ret == SQL_ERROR || ret == SQL_INVALID_HANDLE) {
				HandleError();
			}		
			mtdt.AddColumn(col);
		}		
	}catch(...) { HandleError(); }
	return mtdt;
}

bool ResultSet::MoveNext() {
	try {
		SQLRETURN rc = SQLFetchScroll(*this->m_hStmt,SQL_FETCH_NEXT,0);
		if(rc == SQL_NO_DATA) return false;
		if(rc == SQL_ERROR) {
			HandleError(); 
		}
	}catch(...) { HandleError(); }
	return true;
}

bool ResultSet::MovePrevious() {
	try {
		SQLRETURN rc = SQLFetchScroll(*this->m_hStmt,SQL_FETCH_PRIOR,0);
		if(rc == SQL_NO_DATA || rc < 0) return false;
		if(rc == SQL_ERROR) {
			HandleError();
		}
	}catch(...) { HandleError(); }
	return true;
}

bool ResultSet::MoveFirst() {
	try {		
		SQLRETURN rc = SQLFetchScroll(*this->m_hStmt,SQL_FETCH_FIRST,0);
		if(rc == SQL_NO_DATA) return false;
		if(rc < 0) {
			return false;
		}
		if(rc == SQL_ERROR) {
			HandleError();
			/*this->MoveNext();
			rc = SQLFetchScroll(this->m_hStmt,SQL_FETCH_FIRST,0);
			if(rc == SQL_NO_DATA) return false;*/
		}
	}catch(...) { HandleError(); }
	return true;
}

bool ResultSet::MoveLast() {
	try {
		SQLRETURN rc = SQLFetchScroll(*this->m_hStmt,SQL_FETCH_LAST,0);
		if(rc == SQL_NO_DATA || rc < 0) return false;
		if(rc == SQL_ERROR) {
			HandleError();
		}
	}catch(...) { HandleError(); }
	return true;
}

bool ResultSet::Bind(int col_no,char* buff,int len) {
	try {
		SQLINTEGER sz = 0;			
		SQLRETURN rc = SQLBindCol(*this->m_hStmt, col_no, SQL_C_CHAR,
			buff, len, &sz);
		if(rc == SQL_ERROR) {
			HandleError();
		}
	}catch(...) { HandleError(); }
	return true;
}

void ResultSet::HandleError() {
	SQLGetDiagRec(SQL_HANDLE_STMT,*this->m_hStmt,this->m_iRec,
	this->m_cState,&this->m_nErr,this->m_cMsg,
	sizeof(m_cMsg),&this->m_nMsg);
	throw EasyODBCException((char*)this->m_cMsg,this->m_nErr);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品一区二区在线播放| 欧美一卡二卡三卡四卡| 午夜国产精品影院在线观看| 久久久国产午夜精品| 欧美少妇bbb| 成人免费视频免费观看| 日韩高清一级片| 亚洲天堂a在线| 26uuu另类欧美亚洲曰本| 欧美日韩国产经典色站一区二区三区| 国产精品1区二区.| 免费人成在线不卡| 亚洲影院在线观看| 中文字幕制服丝袜一区二区三区| 欧美成人猛片aaaaaaa| 欧美日韩综合色| 91美女在线视频| 99久久精品国产网站| 国内成人免费视频| 麻豆精品国产91久久久久久| 一区二区三区日韩在线观看| 亚洲视频一区在线观看| 久久精品这里都是精品| 精品国产百合女同互慰| 91精品国产欧美一区二区成人| 在线观看亚洲精品| 色素色在线综合| 91麻豆.com| 91亚洲资源网| 91老师片黄在线观看| 99视频国产精品| 99免费精品在线观看| 成人免费视频一区二区| 成人一级片网址| 成人少妇影院yyyy| 91视频xxxx| av一本久道久久综合久久鬼色| 成人精品免费看| 成人h版在线观看| 成人高清在线视频| 成人av资源下载| 99久久精品免费观看| 色综合中文字幕国产| 成人动漫中文字幕| 91在线一区二区| 欧美中文字幕一区二区三区| 欧美日韩久久一区二区| 欧美一级二级在线观看| 欧美xxxx在线观看| 国产精品网曝门| 亚洲欧美日韩人成在线播放| 一区二区三区在线观看动漫| 亚洲一区二区三区四区在线观看 | 久久久五月婷婷| 精品国产一区二区三区四区四 | 久久综合九色综合欧美98| 日韩欧美电影在线| 久久午夜电影网| 亚洲欧美福利一区二区| 亚洲国产成人91porn| 久久国产人妖系列| 国产老妇另类xxxxx| 成人国产精品免费| 欧美少妇xxx| 久久久亚洲综合| 成人免费在线视频| 亚洲动漫第一页| 国产一区美女在线| 色婷婷亚洲一区二区三区| 欧美区一区二区三区| 欧美xxxxxxxx| 亚洲视频在线观看一区| 日韩 欧美一区二区三区| 国产99久久久国产精品潘金| 日本韩国一区二区三区| 欧美一区二区三区婷婷月色| 日本一区二区三区高清不卡| 亚洲午夜精品在线| 国产经典欧美精品| 欧美久久久影院| 国产精品三级久久久久三级| 丝袜美腿亚洲综合| 大白屁股一区二区视频| 在线观看三级视频欧美| 久久你懂得1024| 午夜精品久久久久久久| 国产91在线|亚洲| 欧美日韩视频专区在线播放| 中文字幕欧美国产| 久久精品国产亚洲高清剧情介绍| bt7086福利一区国产| 欧美电视剧免费全集观看| 亚洲伦在线观看| 国产一区 二区 三区一级| 欧美日韩精品欧美日韩精品一| 欧美激情综合在线| 九一久久久久久| 欧美三级三级三级| 自拍偷自拍亚洲精品播放| 精品亚洲aⅴ乱码一区二区三区| 日本丰满少妇一区二区三区| 国产午夜精品福利| 免费黄网站欧美| 国产精品白丝在线| 激情av综合网| 6080国产精品一区二区| 日韩理论片在线| 国产高清亚洲一区| 亚洲久本草在线中文字幕| 国产一区91精品张津瑜| 色综合欧美在线| 樱花影视一区二区| 色又黄又爽网站www久久| 国产日韩欧美在线一区| 一区二区三区欧美亚洲| 色综合久久久久综合| 欧美精品一区二区三区久久久 | 欧美日韩视频专区在线播放| 日韩视频一区在线观看| 国产精品综合网| 高清国产午夜精品久久久久久| 欧美在线观看一区| 亚洲色大成网站www久久九九| 国产综合色精品一区二区三区| 欧美军同video69gay| 亚洲无线码一区二区三区| 色欧美88888久久久久久影院| 国产精品卡一卡二| 国产黄色精品视频| 久久久影视传媒| 激情伊人五月天久久综合| 91精品国产一区二区三区蜜臀| 一级精品视频在线观看宜春院 | 国产成人8x视频一区二区 | 99综合电影在线视频| 在线视频国内一区二区| 亚洲欧美日韩一区二区 | 五月婷婷综合在线| 欧美美女bb生活片| 日本怡春院一区二区| 欧美精品粉嫩高潮一区二区| 亚洲成人av中文| 3d动漫精品啪啪1区2区免费| 日韩精品五月天| 日韩精品一区二区三区四区| 精品一区二区免费视频| 日韩免费在线观看| 国产麻豆91精品| 国产精品女主播在线观看| av亚洲精华国产精华精华| 亚洲激情五月婷婷| 欧美三片在线视频观看| 蜜臀av一区二区在线观看| wwwwww.欧美系列| 国产suv精品一区二区883| 日韩理论片在线| 欧美日韩夫妻久久| 精品一区二区三区免费观看| 久久久精品tv| 一本久久精品一区二区| 亚洲精品老司机| 欧美一区在线视频| 国产一区二区三区电影在线观看 | 国产福利91精品一区二区三区| 国产精品毛片无遮挡高清| 色一情一乱一乱一91av| 日韩中文字幕亚洲一区二区va在线| 日韩午夜激情av| 成人av网站在线| 日韩中文字幕1| 久久久久久久久久久久久女国产乱| 不卡的av电影| 日韩成人av影视| 国产精品国产三级国产三级人妇| 欧美色图在线观看| 精一区二区三区| 亚洲日本va在线观看| 8x福利精品第一导航| 国产精品18久久久久久久久| 中文字幕一区二区三区精华液| 欧美精品丝袜中出| 丁香婷婷深情五月亚洲| 视频一区视频二区中文字幕| 国产欧美一区二区精品性| 欧美日韩午夜在线| 成人深夜福利app| 久久99最新地址| 亚洲在线一区二区三区| 精品乱码亚洲一区二区不卡| 一本色道综合亚洲| 国产剧情一区在线| 天天操天天综合网| 亚洲欧洲av色图| 精品国产精品一区二区夜夜嗨| 91国产成人在线| 国产91在线看| 久久国产夜色精品鲁鲁99| 伊人色综合久久天天人手人婷| 久久综合色8888| 在线不卡一区二区|