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

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

?? connection.cpp

?? 開發環境為VC++ 的數據庫管理系統
?? CPP
字號:
// OraLib 0.0.3 / 2002-06-30
//	connection.cpp
//
//	http://606u.dir.bg/
//	606u@dir.bg
#include "stdafx.h"

#include "_p.h"

#include "oralib.h"


// set to 1 to track OCI's memory usage
#if (0)
	dvoid *malloc_func (dvoid * /* ctxp */, size_t size)
		{ return (malloc (size)); }
	dvoid *realloc_func (dvoid * /* ctxp */, dvoid *ptr, size_t size)
		{ return (realloc (ptr, size)); }
	void free_func (dvoid * /* ctxp */, dvoid *ptr)
		{ free (ptr); }
#else
#	define	malloc_func		NULL
#	define	realloc_func	NULL
#	define	free_func		NULL
#endif


namespace oralib {


connection::connection (void)
{
	initialize ();
}


connection::connection (
	IN const char *service_name,
	IN const char *login,
	IN const char *password,
	IN OPTIONAL unsigned long env_mode,	// = OCI_OBJECT
	IN OPTIONAL bool non_blocking_mode)	// = false
{
	initialize ();
	try
	{
		open (
			service_name,
			login,
			password,
			env_mode,
			non_blocking_mode);
	}
	catch (...)
	{
		close ();
		throw;
	}
}


connection::~connection ()
{
	cleanup (); // calls close
}


void
connection::initialize (void)
{
	environment_handle = NULL;
	server_handle = NULL;
	error_handle = NULL;
	session_handle = NULL;
	svc_context_handle = NULL;

	is_opened = false;
	is_available = false;
	is_blocking = false;
}


void
connection::open (
	IN const char *service_name,
	IN const char *login,
	IN const char *password,
	IN OPTIONAL unsigned long env_mode,	// = OCI_OBJECT
	IN OPTIONAL bool non_blocking_mode)	// = false
{
	// prerequisites
	ASSERT (service_name && login && password);
	ASSERT (!is_opened);

	sword	result;

	// allocate an environment handle
	result = OCIEnvCreate (
		&environment_handle,
		env_mode,
		NULL,		// context
		malloc_func,	// malloc
		realloc_func,	// realloc
		free_func,		// free
		0,			// extra memory to allocate
		NULL);		// pointer to user-memory

	// allocate a server handle
	if (result == OCI_SUCCESS)
		result = OCIHandleAlloc (
			environment_handle,
			(void **) &server_handle,
			OCI_HTYPE_SERVER,
			0,		// extra memory to allocate
			NULL);	// pointer to user-memory
	else
		throw (oralib::error (EC_ENV_CREATE_FAILED, __FILE__, __LINE__));

	// allocate an error handle
	if (result == OCI_SUCCESS)
		result = OCIHandleAlloc (
			environment_handle,
			(void **) &error_handle,
			OCI_HTYPE_ERROR,
			0,		// extra memory to allocate
			NULL);	// pointer to user-memory

	// create a server context
	if (result == OCI_SUCCESS)
		result = OCIServerAttach (
			server_handle,
			error_handle,
			(text *) service_name,
			strlen (service_name),
			OCI_DEFAULT);
	else
		throw (oralib::error (result, environment_handle, __FILE__, __LINE__));

	// allocate a service handle
	if (result == OCI_SUCCESS)
		result = OCIHandleAlloc (
			environment_handle,
			(void **) &svc_context_handle,
			OCI_HTYPE_SVCCTX,
			0,		// extra memory to allocate
			NULL);	// pointer to user-memory
	else
		throw (oralib::error (result, error_handle, __FILE__, __LINE__));

	// set the server attribute in the service context handle
	if (result == OCI_SUCCESS)
		result = OCIAttrSet (
			svc_context_handle,
			OCI_HTYPE_SVCCTX,
			server_handle,
			sizeof (OCIServer *),
			OCI_ATTR_SERVER,
			error_handle);
	else
		throw (oralib::error (result, environment_handle, __FILE__, __LINE__));

	// allocate a user session handle
	if (result == OCI_SUCCESS)
		result = OCIHandleAlloc (
			environment_handle,
			(void **) &session_handle,
			OCI_HTYPE_SESSION,
			0,		// extra memory to allocate
			NULL);	// pointer to user-memory
	else
		throw (oralib::error (result, error_handle, __FILE__, __LINE__));

	// set username and password attributes in user session handle
	if (result == OCI_SUCCESS)
		result = OCIAttrSet (
			session_handle,
			OCI_HTYPE_SESSION,
			(text *) login,
			strlen (login),
			OCI_ATTR_USERNAME,
			error_handle);
	else
		throw (oralib::error (result, environment_handle, __FILE__, __LINE__));

	if (result == OCI_SUCCESS)
		result = OCIAttrSet (
			session_handle,
			OCI_HTYPE_SESSION,
			(text *) password,
			strlen (password),
			OCI_ATTR_PASSWORD,
			error_handle);

	// start the session
	if (result == OCI_SUCCESS)
		result = OCISessionBegin (
			svc_context_handle,
			error_handle,
			session_handle,
			OCI_CRED_RDBMS,
			OCI_DEFAULT);

	// set the user session attribute in the service context handle
	if (result == OCI_SUCCESS)
		result = OCIAttrSet (
			svc_context_handle,
			OCI_HTYPE_SVCCTX,
			session_handle,
			sizeof (OCISession *),
			OCI_ATTR_SESSION,
			error_handle);

	// switch to non-blocking mode?
	if (result == OCI_SUCCESS &&
		non_blocking_mode)
	{
		ub1	attr_value;

		attr_value = 1;
		result = OCIAttrSet (
			server_handle,
			OCI_HTYPE_SERVER,
			&attr_value,
			sizeof (attr_value),
			OCI_ATTR_NONBLOCKING_MODE,
			error_handle);
	}

	if (result == OCI_SUCCESS)
	{
		is_opened = true;
		is_available = true;
		is_blocking = !non_blocking_mode;
	}
	else
		throw (oralib::error (result, error_handle, __FILE__, __LINE__));
}


void
connection::close (void)
{
	sword	result;

	// no prerequisites

	// just in case switch server to blocking mode
	if (server_handle != NULL)
	{
		ub1	attr_value;

		attr_value = 0;
		result = OCIAttrSet (
			server_handle,
			OCI_HTYPE_SERVER,
			&attr_value,
			sizeof (attr_value),
			OCI_ATTR_NONBLOCKING_MODE,
			error_handle);
	}
	else
		result = OCI_SUCCESS;

	// end session
	if (svc_context_handle != NULL &&
		error_handle != NULL)
	{
		if (session_handle != NULL)
			result = OCISessionEnd (
				svc_context_handle,
				error_handle,
				session_handle,
				OCI_DEFAULT);
		else
			result = OCI_SUCCESS;

		// detach from the oracle server
		if (result == OCI_SUCCESS)
			result = OCIServerDetach (
				server_handle,
				error_handle,
				OCI_DEFAULT);
	}
	else
		result = OCI_SUCCESS;

	// free handles
	if (result == OCI_SUCCESS &&
		svc_context_handle != NULL)
		result = OCIHandleFree (
			svc_context_handle,
			OCI_HTYPE_SVCCTX);

	if (result == OCI_SUCCESS &&
		session_handle != NULL)
	{
		svc_context_handle = NULL;
		result = OCIHandleFree (
			session_handle,
			OCI_HTYPE_SESSION);
	}
	
	if (result == OCI_SUCCESS &&
		error_handle != NULL)
	{
		session_handle = NULL;
		result = OCIHandleFree (
			error_handle,
			OCI_HTYPE_ERROR);
	}
	
	if (result == OCI_SUCCESS &&
		server_handle != NULL)
	{
		error_handle = NULL;
		result = OCIHandleFree (
			server_handle,
			OCI_HTYPE_SERVER);
	}

	
	if (result == OCI_SUCCESS &&
		environment_handle != NULL)
	{
		server_handle = NULL;
		result = OCIHandleFree (
			environment_handle,
			OCI_HTYPE_ENV);
		if (result == OCI_SUCCESS)
			environment_handle = NULL;
	}

	if (result == OCI_SUCCESS)
	{
		is_opened = false;
		is_available = false;
		is_blocking = false;
	}
}


void
connection::execute (
	IN const char *sql_block,
	IN OPTIONAL int sql_len)	// = -1
{
	// prerequisites
	ASSERT (sql_block);

	statement st (*this, sql_block, sql_len);
	st.execute_prepared ();
}


statement*
connection::prepare (
	IN const char *sql_block,
	IN OPTIONAL int sql_len)	// = -1
{
	// prerequisites
	ASSERT (sql_block);

	return (new statement (
		*this,
		sql_block,
		sql_len));
}


resultset*
connection::select (
	IN const char *select,
	IN OPTIONAL int select_len)	// = -1
{
	// prerequisites
	ASSERT (select);

	statement	*s = prepare (select, select_len);
	try
	{
		oralib::resultset	*r = s->select ();
		r->attach_statement (s);
		return (r);
	}
	catch (...)
	{
		s->release ();
		throw;
	}
}


};	// oralib namespace

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产欧美视频一区二区三区| 久久丝袜美腿综合| 色综合久久99| 99久久99久久精品免费观看| 国产成人av一区二区| 国产麻豆成人精品| 国产精品99久| 成人免费av资源| 91网站最新地址| 在线观看日韩av先锋影音电影院| 在线免费精品视频| 欧美丰满高潮xxxx喷水动漫| 91精品国产麻豆| 久久综合九色综合欧美亚洲| 久久综合网色—综合色88| 久久久久久久久蜜桃| 国产午夜久久久久| 亚洲婷婷在线视频| 午夜免费久久看| 久久精品国产精品青草| 国产不卡视频一区二区三区| 99久久99久久免费精品蜜臀| 欧美自拍丝袜亚洲| 日韩亚洲欧美一区| 日本一区二区三区视频视频| 亚洲精品乱码久久久久久久久 | 一本色道久久综合亚洲91| 99精品视频中文字幕| 一本久久a久久免费精品不卡| 欧美性做爰猛烈叫床潮| 欧美电影免费观看高清完整版 | 中文字幕一区二区三区不卡在线 | 最好看的中文字幕久久| 日韩激情在线观看| 盗摄精品av一区二区三区| 91福利精品第一导航| 精品国免费一区二区三区| 最近中文字幕一区二区三区| 麻豆精品在线播放| 99久久精品国产一区| 日韩一区二区精品| 亚洲精品va在线观看| 国产精品一二三区| 欧美丰满一区二区免费视频| 国产精品国产a| 青青青伊人色综合久久| 色婷婷综合久久久久中文| 精品国产亚洲在线| 亚洲午夜成aⅴ人片| 成人免费毛片app| 精品欧美一区二区久久| 亚洲国产va精品久久久不卡综合| 国产成人8x视频一区二区| 56国语精品自产拍在线观看| 18欧美亚洲精品| 国产麻豆精品久久一二三| 欧美一区二区三区电影| 亚洲综合在线五月| caoporen国产精品视频| 久久久午夜精品理论片中文字幕| 丝袜亚洲另类欧美| 欧美色综合久久| 亚洲精品国产精品乱码不99| 成人三级伦理片| 亚洲精品一区二区三区影院| 奇米影视在线99精品| 欧美人动与zoxxxx乱| 亚洲激情综合网| 色综合久久综合中文综合网| 日韩美女精品在线| 91女神在线视频| 一区二区三区91| 99久久精品免费看| 亚洲精品欧美激情| 欧美性猛交一区二区三区精品 | 欧美精品日韩精品| 亚洲一二三区视频在线观看| 在线观看视频91| 婷婷一区二区三区| 911国产精品| 日韩av电影一区| 日韩美女一区二区三区四区| 久久激情五月婷婷| 国产三级一区二区三区| 成人激情动漫在线观看| 亚洲人成伊人成综合网小说| 色婷婷国产精品| 日韩电影在线免费观看| 日韩欧美一二三| 国产激情视频一区二区三区欧美| 中文字幕不卡的av| 色综合久久久久| 日韩专区中文字幕一区二区| 精品入口麻豆88视频| 国产高清久久久| 综合色天天鬼久久鬼色| 欧美日韩在线播放三区| 麻豆久久一区二区| 国产日韩精品一区| 欧美午夜电影在线播放| 精品一区二区三区视频在线观看| 国产三级精品三级在线专区| 91美女蜜桃在线| 日本不卡的三区四区五区| 久久久久97国产精华液好用吗| 国产aⅴ综合色| 亚洲一区二区视频在线| 精品久久久久久久久久久久包黑料 | 亚洲精品在线观看网站| 风间由美一区二区三区在线观看| 中文字幕在线播放不卡一区| 制服丝袜亚洲网站| 成人av免费网站| 麻豆国产精品777777在线| 中文乱码免费一区二区| 欧美一区二区成人6969| 色哟哟欧美精品| 国产剧情一区二区| 亚洲va国产va欧美va观看| 日本一区二区三区免费乱视频| 欧美日韩国产首页| av一区二区三区四区| 久久成人羞羞网站| 亚洲成人免费影院| 亚洲欧美日韩久久| 国产精品三级视频| 精品成人免费观看| 欧美一区二区三区四区高清| 色综合网站在线| 国产精品911| 久久av中文字幕片| 天天综合网 天天综合色| 亚洲色图欧洲色图婷婷| 国产欧美va欧美不卡在线| 日韩欧美一区在线观看| 欧美日韩日日摸| 色婷婷av久久久久久久| 99久久国产综合精品麻豆| 国产电影精品久久禁18| 久久成人久久鬼色| 青椒成人免费视频| 青青草国产成人av片免费| 亚洲午夜久久久| 亚洲国产婷婷综合在线精品| 亚洲男女毛片无遮挡| 中文字幕一区二区三中文字幕| 久久一二三国产| 久久亚区不卡日本| 久久久蜜桃精品| 久久综合色之久久综合| 日韩欧美在线123| 欧美变态tickle挠乳网站| 日韩欧美不卡一区| 精品精品国产高清a毛片牛牛| 日韩免费视频一区二区| 2024国产精品| 国产区在线观看成人精品| 国产日韩欧美综合在线| 国产精品人妖ts系列视频| 中文字幕一区二区三区蜜月| 亚洲欧美日本在线| 亚洲一卡二卡三卡四卡五卡| 亚洲va韩国va欧美va精品| 琪琪一区二区三区| 国产馆精品极品| av影院午夜一区| 欧美日韩三级在线| 日韩欧美国产不卡| 国产精品视频看| 亚洲精品五月天| 免费高清成人在线| 国产99一区视频免费 | 91精品国产综合久久久久久| 日韩一级片在线播放| 国产午夜精品福利| 亚洲免费观看高清完整| 亚洲丶国产丶欧美一区二区三区| 午夜精品久久久久久久99水蜜桃 | 成人av在线电影| 91成人免费在线视频| 欧美蜜桃一区二区三区| 久久这里只有精品首页| 亚洲精品写真福利| 狠狠网亚洲精品| 91久久精品日日躁夜夜躁欧美| 欧美日韩综合不卡| 久久久精品综合| 丝袜美腿亚洲一区| aa级大片欧美| 欧美一级高清片| 亚洲色图欧美偷拍| 国产乱人伦偷精品视频免下载| 91女人视频在线观看| 久久免费偷拍视频| 亚洲尤物视频在线| 粉嫩一区二区三区性色av| 欧美日韩成人综合在线一区二区 | 91精品欧美久久久久久动漫 | 99免费精品视频| 日韩精品一区二|