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

📄 getdatabase.cpp

📁 本源码中应用了sqlite的读写操作 要记着在解压本程序之后不能放在有中文的目录地下 要不然会报错 本程序支持sqlite的插入查询删除等功能 可输入select * from tbArodrome
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// DatabaseAccess.cpp: implementation of the CDatabaseAccess class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "GetDataBase.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CDatabaseAccess::CDatabaseAccess()
{
	CoInitialize(NULL);
	m_bIsOracle=true;		//默认是使用ORACLE数据库

	try
	{
		m_pCon.CreateInstance(_uuidof(Connection));
	}
	catch(_com_error &e)
	{
		TRACE("--CDatabaseAccess::CDatabaseAccess()-- 创建COM实例失败%s,%s\n",(char *)e.Description(),(char *)e.ErrorMessage());
		return;
	}
	catch (...) {
		TRACE("--CDatabaseAccess::CDatabaseAccess()-- 未知错误,创建COM实例失败\n");
		return;
	}
}

CDatabaseAccess::~CDatabaseAccess()
{
	CloseConnect();
}

// 关闭与数据库的连接
void CDatabaseAccess::CloseConnect()
{	
	try
	{
		if(m_pCon ->State)
			m_pCon ->Close();
	}
	catch(_com_error &e)
	{
		TRACE("--CDatabaseAccess::CloseConnect()-- %s,%s\n",(char *)e.Description(),(char *)e.ErrorMessage());
		return;
	}
	catch (...) {
		TRACE("--CDatabaseAccess::CloseConnect()-- 不明错误\n");
		return;
	}
}

// 设置数据库类型
void CDatabaseAccess::SetDatabaseType(bool bIsOracle/*=true*/)
{
	m_bIsOracle=bIsOracle;
}

//连接到数据库服务器,采用系统DSN方式 1成功 0失败
BOOL CDatabaseAccess::ConnectDB(char *pcDSNName,char *pcUserName,char *pcUserPassword)
{  
	//连接Sql Server数据库
	if (!m_bIsOracle)
	{
	try
	{
		CString		strConnection;	//连接字符串
		strConnection.Format("DSN=%s;UID=%s;PWD=%s" ,pcDSNName ,
			                  pcUserName ,pcUserPassword);
		HRESULT		hResult=m_pCon->Open(strConnection.GetBuffer(0) ,"" ,"" ,adModeUnknown);
		strConnection.ReleaseBuffer();

		if(SUCCEEDED(hResult))
			return 1;				//连接成功!
		else
			return 0;				//连接失败!

	}
	catch(_com_error &e)
	{
		TRACE("--CDatabaseAccess::ConnectDB()-- %s,%s\n",(char *)e.Description() ,(char *)e.ErrorMessage());
		return 0;				//连接失败
	}
	catch (...) {
		TRACE("--CDatabaseAccess::ConnectDB()-- 不明错误\n");
		return 0;
	}
	}
	return 0;
}

// 连接到数据库服务器,需要IP,端口和Oracle全局数据库名或SID的连接方式。1成功 0失败.
BOOL CDatabaseAccess::ConnectDB(const char *pcUserName ,const char *pcUserPassword ,const char *pcServerIP ,const char *pcServerPort ,const char *pcGlobalDatabaseName/* = "MFD"*/)
{   
	if(!m_bIsOracle)
	{
		try
		{
			CString		strConnection;	//连接字符串
			strConnection.Format("Provider=SQLOLEDB.1;Password=%s;Persist Security Info=True;User ID=%s;Initial Catalog=%s;Data Source=%s" ,
				 pcUserPassword,pcUserName,pcGlobalDatabaseName,pcServerIP);
			TRACE("%s\n" , strConnection.GetBuffer(0));
			HRESULT		hResult=m_pCon->Open(strConnection.GetBuffer(0),"","",adModeUnknown);
			strConnection.ReleaseBuffer();
			if(SUCCEEDED(hResult))
				return 1;				//连接成功!
			else
				return 0;				//连接失败!
		}
		catch(_com_error &e)
		{
			TRACE("--CDatabaseAccess::ConnectDB()-- %s,%s\n",(char *)e.Description() ,(char *)e.ErrorMessage());
			return 0;				//连接失败
		}
		catch (...) {
			TRACE("--CDatabaseAccess::ConnectDB()-- 不明错误\n");
			return 0;
		}
		
	}
    else
	{
	try
	{
		CString		strConnection;	//连接字符串
		strConnection.Format("Provider=MSDAORA.1;Data Source=(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = %s)(PORT = %s)))(CONNECT_DATA =(SERVICE_NAME = %s)));User ID=%s;Password=%s" ,
			pcServerIP ,pcServerPort ,pcGlobalDatabaseName ,pcUserName , pcUserPassword);
		TRACE("%s\n" , strConnection.GetBuffer(0));
		HRESULT		hResult=m_pCon->Open(strConnection.GetBuffer(0),"","",adModeUnknown);
		strConnection.ReleaseBuffer();
		if(SUCCEEDED(hResult))
			return 1;				//连接成功!
		else
			return 0;				//连接失败!
	}
	catch(_com_error &e)
	{
		TRACE("--CDatabaseAccess::ConnectDB()-- %s,%s\n",(char *)e.Description() ,(char *)e.ErrorMessage());
		return 0;				//连接失败
	}
	catch (...) {
		TRACE("--CDatabaseAccess::ConnectDB()-- 不明错误\n");
		return 0;
	}
}
}

// 执行存储过程(普通存储过程,即非包中的),非零-正确执行;0-失败(参数个数为负数)。
BOOL CDatabaseAccess::ExecuteProcedure(const char *pcProcedureName , PARAMETERINFO aParameterInfo[] , BYTE bCount)
{
	_CommandPtr			pCmd;
	HRESULT hRet = pCmd.CreateInstance(_uuidof(Command));
	if(FAILED(hRet))
	{
		TRACE("--CDatabaseAccess::ExecuteProcedure()-- 创建COMMAND对象失败!");
		return 0;
	}

	_ParameterPtr *aParameterPtr = NULL;
	if(bCount > 0)
	{
		// 动态创建参数对象
		aParameterPtr = new _ParameterPtr[bCount];
		memset(aParameterPtr , 0 ,sizeof(_ParameterPtr) * bCount);
	}
	
	try
	{
		_bstr_t    bstrSPName(pcProcedureName);		// 存储过程名
		if(bCount<=0)								// 无参数
		{
			if(bCount<0)
			{
				return 0;							// 出错
			}
			
			pCmd->ActiveConnection = m_pCon;		// 设置COMMAND对象的属性
			pCmd->CommandText = bstrSPName;
			pCmd->CommandType = adCmdStoredProc;
			// 动态创建记录集对象。
			_RecordsetPtr  *ppRs = new _RecordsetPtr();		
			(*ppRs) = pCmd->Execute(NULL ,NULL ,NULL);		// 执行存储过程.
			
			return (BOOL)ppRs;
		}
		
        pCmd->ActiveConnection = m_pCon;			// 设置COMMAND对象的属性
        pCmd->CommandText = bstrSPName;
        pCmd->CommandType = adCmdStoredProc;


        //创建参数实例并添加之
        for(int i=0; i < bCount; i++)
		{
			aParameterPtr[i] = pCmd->CreateParameter(aParameterInfo[i].Name , aParameterInfo[i].Type , aParameterInfo[i].Direction , aParameterInfo[i].Size);
            pCmd->Parameters->Append(aParameterPtr[i]);
		}
		if(!m_bIsOracle)									// SQLServer中需要!
			pCmd->Parameters->Refresh();					// 资源集中的操作
		
		
		// 对输入参数的处理
        for(i=0; i < bCount; i++)
		{			
			if(aParameterInfo[i].Direction==adParamInput || aParameterInfo[i].Direction == adParamInputOutput)	
			{
				if(m_bIsOracle)								//oracle数据库
				{
					pCmd->Parameters->GetItem(_variant_t(aParameterInfo[i].Name) )->Value = aParameterInfo[i].Value; 
				}
				else										//SQLserver数据库
				{
					CString str;
					str.Format("@%s",((char *)aParameterInfo[i].Name));
					pCmd->Parameters->GetItem(_variant_t(_bstr_t(str.AllocSysString())))->Value = aParameterInfo[i].Value; 
				}
			}
		}
		
		pCmd->Execute(NULL ,NULL ,NULL);					//通过COMMAND对象来执行存储过程。
			
		// 对输出参数的处理
		for(i=0; i < bCount; i++)
		{		
			if(aParameterInfo[i].Direction==adParamOutput || aParameterInfo[i].Direction == adParamInputOutput)	
			{
				if(m_bIsOracle)								//oracle数据库
				{
					aParameterInfo[i].Value = pCmd->Parameters->GetItem(_variant_t(aParameterInfo[i].Name) )->Value;
				}
				else										//SQLserver数据库
				{
					CString str;
					str.Format("@%s",((char *)aParameterInfo[i].Name));
					aParameterInfo[i].Value = pCmd->Parameters->GetItem(_variant_t(_bstr_t(str.AllocSysString())))->Value;
				}
			}  
		}
		if(bCount > 0)
			delete []aParameterPtr;
		return 1;												
	}
	catch(_com_error &e)
	{
		TRACE("--CDatabaseAccess::ExecuteProcedure()-- %s,%s\n",(char *)e.Description(),(char *)e.ErrorMessage());
		if(bCount > 0)
			delete []aParameterPtr;
		return 0;
	}
	catch (...) {
		TRACE("--CDatabaseAccess::ExecuteProcedure()-- 不明错误\n");
		if(bCount > 0)
			delete []aParameterPtr;
		return 0;

⌨️ 快捷键说明

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