2.3 ADO封装类头文件
封装类头文件ADODB.H定义如下:
class CADODB : public CObject { public: CADODB(); //构造函数 ~CADODB(); //析构函数 public: int nResultRow; //查询结果行数 int nResultCol; //查询结果列数 CStringArray pData; //存放查询结果数组 大小为nRow*nCol CString errormessage; //ADO错误信息 bool OpenDataBase(CString DsnName,CString sUserID,CString sPassword); //打开数据库连接 输入DSN名称、用户ID和密码 int Select(CString Sql); //执行SQL查询语句,结果放在数组pData中 int Excute(CString Sql); //执行无返回值得SQL语句 bool CloseDataBase(); //关闭数据库连接 protected: _ConnectionPtr m_pConnection; //定义连接指针 }; |
2.4 封装类实现文件
封装类实现文件ADODB.CPP如下:
#include "stdafx.h" #include "ADODB.h"
CADODB::CADODB() //构造函数,完成初始化 { nResultRow=0; // nResultCol=0; //记录集行数和列数 m_pConnection = NULL; }
CADODB::~CADODB() //关闭数据库物理连接 { if(m_pConnection )m_pConnection->Close(); m_pConnection = NULL; }
bool CADODB::OpenDataBase(CString DsnName,CString sUserID,CString sPassword) { //打开数据库连接 … HRESULT hr=m_pConnection.CreateInstance("ADODB.Connection");//创建连接对象 hr=m_pConnection->Open((_bstr_t)DsnName,(_bstr_t)sUserID,(_bstr_t)sPassword,adOpenUnspecified); //连接数据库 … }
int CADODB::Select(CString SqlStr) //SQL查询语句函数 { … try { hr = m_pRecordset.CreateInstance("ADODB.Recordset");//创建纪录集对象实例 hr = m_pRecordset->putref_ActiveConnection(m_pConnection);//设置连接对象 hr=m_pRecordset->Open(vSqlString,vNull,adOpenDynamic,adLockOptimistic,adCmdText); //打开纪录集 nResultCol = m_pRecordset->Fields->GetCount();//获得纪录集总列数 while(!m_pRecordset->adoEOF) { for (j = 0; j < nResultCol; j++) //取一列数据 { vValue = m_pRecordset->Fields->Item[(long)j]->Value;//取得当前记录字段数据 if(vValue.vt != 1) //数据非空 { int type = vValue.vt; if(VariantChangeType(&vValue1, &vValue, 0, VT_BSTR) == S_OK) //转换数据类型(为字符串) str=vValue1.bstrVal; //保存结果值到临时变量str中 } if(pData.GetSize()<i*nResultCol+j+1) //动态设置数组的大小 m_pResult.SetSize(i*nResultCol+j+1); pData[i*nResultCol+j]=str; //保存结果到数组中 m_pRecordset->MoveNext(); //移动记录集指针到下一行 i++; } m_pRecordset->Close(); m_pRecordset=NULL; nResultRow=i; } catch(_com_error e)///捕捉异常 { … } pData->FreeExtra();//释放多余的内存空间 return nResultRow; } … |
|