编程词典
明日图书
明日软件
用户注册
用户登录
站内
  当前位置:编程词典服务网 >> 编程词典社区论坛 >> 封装ADO对象
  · 封装ADO对象

用户:  大麦
发帖:  430 篇
作品:  0 个
回复:  110 篇
技术分:  1160 分
等级:  
注册:  2010-05-11 09:09:40



发表于:2010-07-13 15:08:10
          楼主

封装ADO对象
为了简化程序的操作,在使用ADO对象时可以将其封装到类中。这样做的好处是,在程序的不同模块中操作数据库时,只要引用封装类的头文件,就可以使用封装过的ADO对象了。
在这里封装了一个ADO类,该类的主要功能是完成数据库的打开和关闭,以及记录集的打开与关闭操作,ADO类的头文件如下。
class ADO 
{
public:
    _ConnectionPtr m_pConnection;        //连接对象指针
 _RecordsetPtr  m_pRecordset;        //记录集对象指针

public:
 ADO();
 virtual ~ADO();
 void OnInitADOConn();          //连接数据库
 _RecordsetPtr&  OpenRecordset(CString sql);      //打开记录集
 void CloseRecordset();          //关闭记录集
 void CloseConn();           //关闭数据库连接
 UINT GetRecordCount(_RecordsetPtr pRecordset);     //获得记录数 
};
接下来介绍一下各个成员函数是如何实现的。
(1)首先介绍ADO类中用于连接数据库的成员函数OnInitADOConn,在该函数中调用ADO连接对象的Open方法连接数据库,代码如下。
void ADO::OnInitADOConn()
{
 ::CoInitialize(NULL);           //初始化COM环境
 try
 {
       m_pConnection.CreateInstance("ADODB.Connection");     //创建连接对象实例
    _bstr_t strConnect="连接语句";
    m_pConnection->Open(strConnect,"","",adModeUnknown);   //打开数据库
 }
 catch(_com_error e)           //捕捉错误
 {
  AfxMessageBox(e.Description());        //弹出错误
 }
}
 注意:在使用时,需要把加粗部分的“连接语句”换成实际连接数据库的字符串。
(2)OpenRecordset成员函数用来打开记录集,在该函数中调用ADO记录集对象的Open方法打开记录集,代码如下。
_RecordsetPtr&  ADO::OpenRecordset(CString sql)
{
 ASSERT(!sql.IsEmpty());          //SQL语句不能为空
 try
 {
  m_pRecordset.CreateInstance(__uuidof(Recordset));    //创建记录集对象实例
  m_pRecordset->Open(_bstr_t(sql), m_pConnection.GetInterfacePtr(),
   adOpenDynamic, adLockOptimistic, adCmdText);    //执行SQL得到记录集
 }
 catch(_com_error e)           //捕获可能的异常
 {
  AfxMessageBox(e.Description());       //弹出错误
 }
 return m_pRecordset;          //返回记录集指针
}
(3)CloseRecordset成员函数用来关闭记录集,代码如下。
void ADO::CloseRecordset()
{
 if(m_pRecordset->GetState() == adStateOpen)     //判断当前的记录集状态
  m_pRecordset->Close();        //关闭记录集
}
(4)CloseConn成员函数用来关闭数据库连接,代码如下。
void ADO::CloseConn()
{
 m_pConnection->Close();         //关闭数据库连接
 ::CoUninitialize();          //释放COM环境
}
(5)GetRecordCount成员函数用于获得记录集中记录的个数,代码如下。
UINT ADO::GetRecordCount(_RecordsetPtr pRecordset)
{
 int nCount = 0;           //声明保存记录数的变量
 try{
  pRecordset->MoveFirst();        //将记录集指针移动到第一条记录
 }
 catch(...)            //捕捉可能出现的错误
 {
  return 0;           //产生错误时返回0
 }
 if(pRecordset->adoEOF)         //判断记录集中是否没有记录
  return 0;           //无记录时返回0
 while (!pRecordset->adoEOF)        //当记录集指针没有指向最后时
 {
  pRecordset->MoveNext();        //将记录集指针移动到下一条记录
  nCount = nCount + 1;        //记录个数的变量加1
 }
 pRecordset->MoveFirst();         //将记录集指针移动到第一条记录
 return nCount;           //返回记录数
}

 

本帖赏分:0 分   回复数:0 篇     
修改   删除   引用   回复
该帖暂无回复!
吉林省明日科技有限公司提供技术支持. 
Copyright © 1999-2008 吉林省明日科技有限公司. 吉ICP备10002740
当前时区 GMT+8, 今天是 
刷新页面 - 关于我们 - 设为首页