ADO 访问数据库是基于COM ,访问速度快、使用方便等特点。我在实际的工作当中发现可以把一些常用的方法构造成一个类,不妨叫她为 CAdoEx 类吧。下面分别是头文件、实现文件。要是有不妥之处请给我发邮件 luoshizhen@163.net
*说明:--------------------------------------------*/
/* 注 stdafx.h 里要有下面两行 */
/* #include <comdef.h> */
/* #import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF") */
/* AfxOleInit() ; ADO 初始在应用的主线程初始化时调用 */
/*说明:--------------------------------------------*/
/* 以下是类的成员说明 */
#ifndef _ADOEX_H_
#define _ADOEX_H_
#include "stdafx.h"
class CAdoEx
{
public:
CAdoEx();
virtual ~CAdoEx();
/*打开 Ado 数据库*/
BOOL OpenAdo(LPCTSTR lpDSN ,LPCTSTR lpUID ,LPCTSTR lpPWD);
file://--------------------------------------------//
/* ADO 通用查询函数 */
/* 调用参数: 正确的SQL 查询语句. */
/* 可以对一个表查询,也可以对多个表查询 */
/* 返回一个纪录集 */
/* 如果成功返回一个非空的纪录集 */
/* 如果失败则返回一个NULL的纪录集 */
_RecordsetPtr Query(LPCTSTR lpQuery);
file://--------------------------------------------//
file://--------------------------------------------//
/*连接数据库 */
BOOL CloseAdo();
file://--------------------------------------------//
file://--------------------------------------------//
/* ADO 通用SQL语句执行函数 */
/* 调用参数: 正确的SQL 查询语句. */
/* 可以对一个表插入 修改 删除 操作 */
/* 如果成功返回真 */
/* 如果失败返回假 */
BOOL Execute(LPCTSTR lpExcute);
file://--------------------------------------------//
protected:
_RecordsetPtr retRecordsetPtr;
char lpBuff[500];
HRESULT hResult;
BOOL m_bOpen;
_ConnectionPtr m_pConnection;
};
#endif
/*------------------以下为实现文件-------------------------
/* 说明: 这是一个 Ado 类,可以实现用ADO对数据库操作 */
/* 1. 连接数据库 */
/* 2. 查询数据库的一个或关联表 */
/* 3. 执行SQL 语句插入 修改 删除 操作 */
/* 4. 关闭数据库 */
#include "stdafx.h"
#include "AdoEx.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
CAdoEx::CAdoEx()
{
m_bOpen = FALSE ;
/*初始化连接的实例*/
m_pConnection.CreateInstance(_uuidof(Connection)) ;
}
CAdoEx::~CAdoEx()
{
if(retRecordsetPtr !=NULL)
retRecordsetPtr->Close() ;
retRecordsetPtr = NULL ;
CloseAdo() ;
m_bOpen = FALSE ;
}
/*打开 Ado 数据库*/
BOOL CAdoEx::OpenAdo(LPCTSTR lpDSN ,LPCTSTR lpUID ,LPCTSTR lpPWD )
{
BOOL bRet = FALSE ;
if(m_bOpen) return TRUE ;
try
{
hResult = m_pConnection->Open(lpDSN,lpUID,lpPWD,0) ;
if (SUCCEEDED(hResult))
{
TRACE0("Open ADO Database Succeeded !\n") ;
m_bOpen = TRUE ;
bRet = TRUE ;
}
else
{
m_bOpen = FALSE ;
bRet = FALSE ;
}
} /*end of try*/
catch(_com_error e )
{
memset(lpBuff,0x00,500) ;
sprintf(lpBuff,"打开数据库时发生异常 \n:%s",e.ErrorMessage());
AfxMessageBox(lpBuff) ;
}
return bRet ;
}
/* ADO 通用查询函数 */
/* 调用参数: 正确的SQL 查询语句. */
/* 可以对一个表查询,也可以对多个表查询 */
/* 返回一个纪录集 */
/* 如果成功返回一个非空的纪录集 */
/* 如果失败则返回一个NULL的纪录集 */
_RecordsetPtr CAdoEx::Query(LPCTSTR lpQuery)
{
retRecordsetPtr = NULL ;
_variant_t vRecsAffected ;
if(!m_bOpen) return NULL ;
try
{
retRecordsetPtr = m_pConnection->Execute(lpQuery,
&vRecsAffected,
adOptionUnspecified) ;
}
catch(_com_error e)
{
memset(lpBuff,0x00,500) ;
sprintf(lpBuff,"查询数据库表时发生异常 \n:%s",e.ErrorMessage());
AfxMessageBox(lpBuff) ;
}
return retRecordsetPtr ;
}
/* ADO 通用SQL语句执行函数 */
/* 调用参数: 正确的SQL 查询语句. */
/* 可以对一个表插入 修改 删除 操作 */
/* 如果成功返回真 */
/* 如果失败返回假 */
BOOL CAdoEx::Execute(LPCTSTR lpExcute)
{
BOOL bRet = FALSE ;
_variant_t vRecsAffected ;
if(!m_bOpen) return NULL ;
try
{
m_pConnection->Execute(lpExcute,
&vRecsAffected,
adOptionUnspecified) ;
bRet = TRUE ;
}
catch(_com_error e)
{
bRet = FALSE ;
memset(lpBuff,0x00,500) ;
sprintf(lpBuff,"更改数据库表时发生异常 \n:%s",e.ErrorMessage());
AfxMessageBox(lpBuff) ;
}
return bRet ;
}
BOOL CAdoEx::CloseAdo()
{
if (m_bOpen)
{
m_pConnection->Close() ;
TRACE0("Close ADO Connection !\n") ;
}
return TRUE ;
}
/* 说明: 这是一个 Ado 类,可以实现用ADO对数据库操作 */
/* 1. 连接数据库 */
/* 2. 查询数据库的一个或关联表 */
/* 3. 执行SQL 语句插入 修改 删除 操作 */
/* 4. 关闭数据库 */
#include "stdafx.h"
#include "AdoEx.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
CAdoEx::CAdoEx()
{
m_bOpen = FALSE ;
/*初始化连接的实例*/
m_pConnection.CreateInstance(_uuidof(Connection)) ;
}
CAdoEx::~CAdoEx()
{
if(retRecordsetPtr !=NULL)
retRecordsetPtr->Close() ;
retRecordsetPtr = NULL ;
CloseAdo() ;
m_bOpen = FALSE ;
}
/*打开 Ado 数据库*/
BOOL CAdoEx::OpenAdo(LPCTSTR lpDSN ,LPCTSTR lpUID ,LPCTSTR lpPWD )
{
BOOL bRet = FALSE ;
if(m_bOpen) return TRUE ;
try
{
hResult = m_pConnection->Open(lpDSN,lpUID,lpPWD,0) ;
if (SUCCEEDED(hResult))
{
TRACE0("Open ADO Database Succeeded !\n") ;
m_bOpen = TRUE ;
bRet = TRUE ;
}
else
{
m_bOpen = FALSE ;
bRet = FALSE ;
}
} /*end of try*/
catch(_com_error e )
{
memset(lpBuff,0x00,500) ;
sprintf(lpBuff,"打开数据库时发生异常 \n:%s",e.ErrorMessage());
AfxMessageBox(lpBuff) ;
}
return bRet ;
}
/* ADO 通用查询函数 */
/* 调用参数: 正确的SQL 查询语句. */
/* 可以对一个表查询,也可以对多个表查询 */
/* 返回一个纪录集 */
/* 如果成功返回一个非空的纪录集 */
/* 如果失败则返回一个NULL的纪录集 */
_RecordsetPtr CAdoEx::Query(LPCTSTR lpQuery)
{
retRecordsetPtr = NULL ;
_variant_t vRecsAffected ;
if(!m_bOpen) return NULL ;
try
{
retRecordsetPtr = m_pConnection->Execute(lpQuery,
&vRecsAffected,
adOptionUnspecified) ;
}
catch(_com_error e)
{
memset(lpBuff,0x00,500) ;
sprintf(lpBuff,"查询数据库表时发生异常 \n:%s",e.ErrorMessage());
AfxMessageBox(lpBuff) ;
}
return retRecordsetPtr ;
}
/* ADO 通用SQL语句执行函数 */
/* 调用参数: 正确的SQL 查询语句. */
/* 可以对一个表插入 修改 删除 操作 */
/* 如果成功返回真 */
/* 如果失败返回假 */
BOOL CAdoEx::Execute(LPCTSTR lpExcute)
{
BOOL bRet = FALSE ;
_variant_t vRecsAffected ;
if(!m_bOpen) return NULL ;
try
{
m_pConnection->Execute(lpExcute,
&vRecsAffected,
adOptionUnspecified) ;
bRet = TRUE ;
}
catch(_com_error e)
{
bRet = FALSE ;
memset(lpBuff,0x00,500) ;
sprintf(lpBuff,"更改数据库表时发生异常 \n:%s",e.ErrorMessage());
AfxMessageBox(lpBuff) ;
}
return bRet ;
}
BOOL CAdoEx::CloseAdo()
{
if (m_bOpen)
{
m_pConnection->Close() ;
TRACE0("Close ADO Connection !\n") ;
}
return TRUE ;
}