铜包钢金具预绞丝:vc2005 ado数据库封装类

来源:百度文库 编辑:偶看新闻 时间:2024/05/01 01:02:08
/*******************************************************************************
    文件名称 : Ado.h 头文件
    作    者 : 杨治忠
    创建时间 : 2011-1-21  9:25:22
    文件描述 : 简单的ADO操作Access2003和Access2007的封装类
    版权声明 : 对其他类型数据库的链接暂时没加 QQ:940446982
    修改历史 : 杨治忠 2011-1-21    1.00    初始版本
*******************************************************************************/
//注:构造函数已经将智能指针初始化,并在析构函数注销,要用到智能指针操作数据库时,只能用对应的对象调用类的智能指针
#pragma once
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
class CAdo
{
public:
 CAdo(void);
public:
 ~CAdo(void);
public:
 //连接指针
 _ConnectionPtr m_pConnection; //命令执行指针
 _CommandPtr m_pCommand; //结果集指针
 _RecordsetPtr m_pRecordset;
public:
 //链接数据库
 void LinkDatabase(CString str_dbmsname,CString str_dbmstype);
 //打开数据库表
 void OpenTheTable(CString str_tablename);
 //关闭表
 void ClossTheTable();
};/*******************************************************************************
    文件名称 : Ado.cpp 实现文件
    作    者 : 杨治忠
    创建时间 : 2011-1-21  9:22:41
    文件描述 : 简单的ADO操作Access2003和Access2007的封装类
    版权声明 : 对其他类型数据库的链接暂时没加 QQ:940446982
    修改历史 : 杨治忠 2011-1-21    1.00    初始版本
*******************************************************************************/
#include "StdAfx.h"
#include "Ado.h"
/********************************************************************
函数名称  : CAdo(void)
函数描述  : 构造函数
输入参数  : void
备注      : 自动创建智能指针对象
*********************************************************************/
CAdo::CAdo(void)
{
 //OLE/COM初始化
 if(!AfxOleInit())
 {
  AfxMessageBox(_T("OLE/COM初始化错误"));
 }
 //创建智能指针对象
 m_pConnection.CreateInstance(__uuidof(Connection));
 m_pRecordset.CreateInstance(__uuidof(Recordset));
 m_pCommand.CreateInstance(__uuidof(Command));
 
}
/********************************************************************
函数名称  : ~CAdo(void)
函数描述  : 析构函数
输入参数  : void
备注      : 自动关闭记录集和链接并销毁智能指针
*********************************************************************/
CAdo::~CAdo(void)
{
 if(m_pRecordset->State!=adStateClosed)
  m_pRecordset->Close();
 m_pRecordset = NULL; if(m_pCommand->State!=adStateClosed)
  m_pCommand->Release();
 m_pCommand = NULL; if(m_pConnection->State!=adStateClosed)
  m_pConnection->Close();
 m_pConnection = NULL;
}
/********************************************************************
函数名称  : LinkDatabase()
函数描述  : 链接数据库
输入参数  : 数据库名字 str_dbmsname;数据库的类型和版本 str_dbmstype
            str_dbmstype可以是Access2007,Access2003;
备注      :
*********************************************************************/
void CAdo::LinkDatabase(CString str_dbmsname,CString str_dbmstype)
{
 
 // 在ADO操作中建议语句中要常用try...catch()来捕获错误信息,
 // 因为它有时会经常出现一些想不到的错误。
 try                
 { CString str_conn;
     if (str_dbmstype==_T("Access2007"))
     {
   str_conn.Format(_T("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=%s.accdb"),str_dbmsname);
     }
  if (str_dbmstype==_T("Access2003"))
  {
   str_conn.Format(_T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s.mdb"),str_dbmsname);
  }
  // 打开本地Access库
  m_pConnection->Open((_bstr_t)str_conn,"","",adModeUnknown); }
 catch(_com_error e)
 {
  AfxMessageBox(_T("数据库连接失败,确认数据库Demo.mdb是否在当前路径下!"));
 }
}
/********************************************************************
函数名称  : OpenTheTable()
函数描述  : 打开数据库的表(打开记录集)
输入参数  : 表的名字 str_tablename
备注      : 再次打开任何表时记得先关闭多次打开会出错
*********************************************************************/
void CAdo::OpenTheTable(CString str_tablename)
{
 // 在ADO操作中建议语句中要常用try...catch()来捕获错误信息,
 // 因为它有时会经常出现一些想不到的错误。
 try
 {
  CString str_conn;
  str_conn.Format(_T("SELECT * FROM %s"),str_tablename);
  m_pRecordset->Open((_bstr_t)str_conn,        // 查询DemoTable表中所有字段
   m_pConnection.GetInterfacePtr(),  // 获取库接库的IDispatch指针
   adOpenDynamic,
   adLockOptimistic,
   adCmdText);
 }
 catch(_com_error *e)
 {
  AfxMessageBox(e->ErrorMessage());
 }
}
/********************************************************************
函数名称  : ClossTheTable()
函数描述  : 关闭表(关闭记录集集)
输入参数  : void
备注      : 虽然析构函数有自动关闭,但打开与关闭必须配对,这里只是关闭,
           不能让m_pRecordset=NULL,销毁指针由析构函数负责
*********************************************************************/
void  CAdo::ClossTheTable()
{
 if(m_pRecordset->State != adStateClosed)
  m_pRecordset->Close();}