因工作需要,一些项目中频繁的用到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; //服务器地址或名称,如local
BSTR_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下载链接:http://download.youkuaiyun.com/detail/shortcoder/7587935
为简化ADO数据库操作并提高开发效率,本博客介绍了一个自定义的DLL库,该库封装了常用的数据库连接和操作功能,并提供了示例代码及下载链接。
1244





