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; } … 3 使用ADO封装类
建立了ADO封装类后,使用数据库操作就非常简单了。在需使用数据库查询的CPP文件中包含ADO封装类头文件"ADODB.H",然后定义一个CADODB类指针;接下来就是打开数据库连接。使用封装类的成员函数OpenDataBase(…),输入要连接的数据库的DSN名称、用户名和密码,就与数据库建立连接了。要注意的是如果同时连接多个数据库就要声明多个CADODB对象指针,保证数据库连接对象是全局且惟一。接下来就是,调用成员函数Select取得数据库查询结果,执行完毕后查询结果放在CADODB的成员字符数组指针pData中,数组大小可以从成员变量nResultRow和nResultCol中得出。基本步骤如下:
在"stdafx.h"中加入ADO库的导入语句
#import "c:/program files/common files/system/ado/msado15.dll" no_namespace rename("EOF","adoEOF")
在应用程序类中初始化COM对象,在InitInstance()中加入以下语句
AfxOleInit();
加入封装类的声明文件
#include "ADODB.H" …
定义封装类对象
CADODB ADO1; //连接数据库1 CADODB ADO2; //连接数据库2 … ADO1.OpenDataBase("数据源名称","用户ID","用户密码") //建立连接,第一次连接时调用 ADO1.Select("select * from 表名"); //执行SQL查询语句 int nRow= ADO1.GetResultRow(); //取得记录行数 int nCol= ADO1.GetResultCol(); //取得记录列数 for(i=0;i<nRow;i++) //取得查询结果 for(j=0;j<nCol;j++) printf("第%d行第%d列的值是%s/n",i,j,ADO1.pData[i*nCol+j]; … ADO1.CloseDataBase(); //使用完后关闭数据库连接
4 结论和建议
使用封装ADO类后,在应用程序中操作数据库的过程就变得简单了,针对一般的数据库应用程序,而且在数据量不很大的情况下,本封装类已经能够应付,在使用效率上也比较满意。但是该封装没有考虑数据访问的优化处理,数据库使用了动态连接方式,记录集也没有进行分页处理,ADO缓冲区大小和游标类型都采用缺省设置,这些在实际使用中都可能降低封装类的性能,读者可以根据不同的应用情况有针对地进行修改。 
说明:本教程来源互联网或网友上传或出版商,仅为学习研究或媒体推广,wanshiok.com不保证资料的完整性。
2/2 首页 上一页 1 2 |