C++封装ADO数据库连接,并附上DLL源码和测试程序

因工作需要,一些项目中频繁的用到ADO连接数据库,每次都要写一些初始化过程,或者copy过来大篇代码。

“一份好的代码,一用好多年,封装成动态库,一直带身边”,为了提高工作效率或者说为了偷懒,,就封装出这么一个dll,

是VS2008的工程,导出类时有遇到问题,加上下列代码可以解决。

//解决导出动态库报错问题!#pragma warning(disable:4146)#import "C:\Program Files\Common Files\System\ADO\msado15.dll" named_guids rename("EOF","adoEOF"), rename("BOF","adoBOF")#pragma warning(default:4146)using namespace ADODB;

现附上头文件代码:

// ADOProcedureMgr.h: interface for the CADOProcedureMgr class.////////////////////////////////////////////////////////////////////////#if !defined(AFX_ADOPROCEDUREMGR_H__1041F622_10FB_4670_973E_3138656DF70F__INCLUDED_)#define AFX_ADOPROCEDUREMGR_H__1041F622_10FB_4670_973E_3138656DF70F__INCLUDED_#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000#include <vector>//解决导出动态库报错问题!#pragma warning(disable:4146)#import "C:\Program Files\Common Files\System\ADO\msado15.dll" named_guids rename("EOF","adoEOF"), rename("BOF","adoBOF")#pragma warning(default:4146)using namespace ADODB;class _declspec(dllexport) CDataBase{typedef _bstr_t BSTR_T;public://数据库类型typedef enum{ODBC = 0,SQLServer, ACCESS97,ACCESS2000,ACCESSXP,ACCESS_XL,INVALID}DRIVER_TYPE;public:CDataBase(){m_lTimeout = 5;}CDataBase(const CDataBase& src){Copy(src);}CDataBase operator = (const CDataBase& src){Copy(src);return *this;}private:void Copy(const CDataBase& src){m_lTimeout = src.m_lTimeout;m_drvType = src.m_drvType;m_strServerName = src.m_strServerName;m_strUserName = src.m_strUserName;m_strPassword = src.m_strPassword;m_strDataBase = src.m_strDataBase;}public:DRIVER_TYPE m_drvType;//连接数据库类型LONG m_lTimeout;//连接超时BSTR_T m_strServerName;//服务器地址或名称,如localBSTR_T m_strUserName;//用户名BSTR_T m_strPassword;//密码BSTR_T m_strDataBase;//数据库名称};class _declspec(dllexport) CADOProcedureMgr {typedef _bstr_t BSTR_T;public:CADOProcedureMgr();virtual ~CADOProcedureMgr();public://数据库参数 如果在连接状态是否关闭BOOL Connect(const CDataBase& database,BOOL bCloseIfLive = FALSE);void Disconnect();//断开数据库连接,无需手动调用,析构时自动调用BOOL IsActive() const;//返回当前是否处于连接状态//处理数据存储过程BOOL CallDBProcedure(const _bstr_t& strProcName,const std::vector<_variant_t>& vInParamsName,const std::vector<_variant_t>& vInParams,std::vector<_variant_t>& vOutParams,size_t szOutParams,_RecordsetPtr& rsResult);BOOL Execute(const _bstr_t& strSQLCmd);//执行sql语句命令public:_ConnectionPtr m_ptrConnection;//智能指针,连接数据库_CommandPtr m_ptrCommand;//智能指针,执行数据库命令_RecordsetPtr m_ptrRecordset;//智能指针,保存sql语句执行结果CDataBase m_database;//此数据成员用于接收参数传递};#endif // !defined(AFX_ADOPROCEDUREMGR_H__1041F622_10FB_4670_973E_3138656DF70F__INCLUDED_)

DLL和测试DEMO下载链接:

心中有愿望一定要去闯,努力实现最初的梦想,

C++封装ADO数据库连接,并附上DLL源码和测试程序

相关文章:

你感兴趣的文章:

标签云: