⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dbconnection.cpp

📁 VC代码,ADO的SQL server数据库连接,查询基本功能示范
💻 CPP
字号:
#include "stdafx.h"

#include "DBConnection.h"

extern	char strServer[];//服务器
extern  char strUID[];//用户名
extern  char strPWD[];//密码
extern  char strDBname[];//数据库名

///////////////////////////////////////////////////////////////////////////////////////////////
//想法:
//ODBC的数据库连接,可以只提供一个连接,所有需要访问数据库的操作互斥共用一个连接;
//也可以为每个需要访问数据库的操作建立数据库联接
//前者的好处是数据库服务器负担较轻,适合有很多用户访问数据库的情况
//后者的好处是保证客户端的高效
//现在程序采用后者,为每个需要访问数据库的操作建立数据库联接
///////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////
//ODBC全局环境句柄获取,释放
//SQLRETURN ODBCDbInitialHenv()
//void ODBCDbFreeHenv()
///////////////////////////////////////////////////////////////////////////////////////////////

SQLHENV  GlobalHenv;

//初始化,获得全局的ODBC环境句柄GlobalHenv,并设置环境属性
//是ODBCDbInitialHdbc()函数运行的基础
//必须在程序开始时,操作数据库前,调用本函数,初始化GlobalHenv,才能保证后面操作数据库时,正确运行
//返回值SQL_SUCCESS或者SQL_SUCCESS_WITH_INFO被认为成功
//ODBCDbInitialHenv()函数如果不能返回成功,则不让程序往下运行。可以提示重新输入数据库连接数据或提示退出
//在此假设下,不再专门保留全局变量保存ODBCDbInitialHenv()函数的返回值,来反映GlobalHenv的值是否有效
//能正常进入程序,则认为GlobalHenv的值为有效值。
SQLRETURN ODBCDbInitialHenv()
{
	char ConnStr[128]; 
	memset(ConnStr,0,128);
	sprintf(ConnStr,"DRIVER={SQL Server};SERVER=%s;UID=%s;PWD=%s;DATABASE=%s",strServer,strUID,strPWD,strDBname); 

	SQLRETURN 	retcode;
	retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &GlobalHenv);  
	if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) 
	{
		//获取GlobalHenv环境句柄成功,则设置环境属性
		//(void*)SQL_OV_ODBC3这种转换有例程这么用
		retcode = ::SQLSetEnvAttr(GlobalHenv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);
		return retcode;
	}
	else
	{
		return retcode;
	}

}

//释放ODBC全局环境句柄
//此函数应该与ODBCDbInitialHenv()函数的调用对应
//因此只在程序结束时调用一次
void ODBCDbFreeHenv()
{
	SQLFreeHandle(SQL_HANDLE_ENV, GlobalHenv);
}

///////////////////////////////////////////////////////////////////////////////////////////////
//ODBC连接句柄获取,释放
//SQLRETURN ODBCDbInitialHdbc(SQLHDBC*  pHdbc)
//void ODBCDbFreeDb(SQLHDBC*  pHdbc)
///////////////////////////////////////////////////////////////////////////////////////////////

//ODBCDbInitialHdbc()函数,通过全局的环境句柄GlobalHenv获得连接句柄
//一个环境句柄可以对应多个连接句柄,
//GlobalHenv有效时,本函数可以多次调用,建立多个连接
SQLRETURN ODBCDbInitialHdbc(SQLHDBC*  pHdbc)
{
	char szBuffer[1024]; 
	SWORD swStrLen;
	SQLRETURN 	retcode;
	//ConnStr,连接字符串
	char ConnStr[128]; 
	memset(ConnStr,0,128);
	sprintf(ConnStr,"DRIVER={SQL Server};SERVER=%s;UID=%s;PWD=%s;DATABASE=%s",strServer,strUID,strPWD,strDBname); 

	/* Allocate connection handle */
	retcode = ::SQLAllocHandle(SQL_HANDLE_DBC, GlobalHenv, pHdbc); 
	if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) 
	{
		/* Set login timeout to 5 seconds. */
		::SQLSetConnectAttr(*pHdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER)5, 0);
		retcode= SQLDriverConnect(*pHdbc,NULL,
								(unsigned char*)ConnStr,
								strlen(ConnStr),
								(unsigned char*)szBuffer,
								sizeof(szBuffer),
								&swStrLen,
								SQL_DRIVER_COMPLETE_REQUIRED); 	
	
	}

	return retcode;

}

void ODBCDbFreeDb(SQLHDBC*  pHdbc)
{			
	SQLDisconnect(*pHdbc);					
	SQLFreeHandle(SQL_HANDLE_DBC, *pHdbc);						
}

///////////////////////////////////////////////////////////////////////////////////////////////
//ADO连接句柄获取,释放
//SQLRETURN ODBCDbInitialHdbc(SQLHDBC*  pHdbc)
//void ODBCDbFreeDb(SQLHDBC*  pHdbc)
///////////////////////////////////////////////////////////////////////////////////////////////


long ADODbInitialConnectionPtr(_ConnectionPtr* pADOConn)
{
	long retADOConn=-1;

	pADOConn->CreateInstance(__uuidof(Connection));
	TCHAR AdoConnStr[128];
	memset(AdoConnStr,0,128);
	wsprintf (AdoConnStr, _T("PROVIDER=SQLOLEDB;SERVER=%s;DATABASE=%s;UID=%s;PWD=%s"),strServer,strDBname,strUID,strPWD);
	_bstr_t	bstrADOConn=AdoConnStr;
	retADOConn=(*pADOConn)->Open(bstrADOConn,"","",-1);		


	return retADOConn;
}

void ADOFree(_ConnectionPtr* pADOConn)
{
	(*pADOConn)->Release();
	(*pADOConn)->Close();
	pADOConn->Release();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -