C++课程设计(论文)封装Ado访问数据库方法的类_第1页
C++课程设计(论文)封装Ado访问数据库方法的类_第2页
C++课程设计(论文)封装Ado访问数据库方法的类_第3页
C++课程设计(论文)封装Ado访问数据库方法的类_第4页
C++课程设计(论文)封装Ado访问数据库方法的类_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、重庆科技学院visual c+论文院(系):电气与信息工程学院 班 级: 计科应 08 学生姓名: 学 号: 论文题目:封装ado访问数据库方法的类 _完成日期: 2011 年 5月25 日 指导教师评语: _ 成绩(五级记分制):_ _ 教师签名:_封装ado访问数据库方法的类摘要:vc+提供了多种访问数据库的接口,ado是目前在windows环境中比较流行的客户端数据库访问技术。使用封装方法和源程序实现vc+下尝试ado访问数据库类,使其更方便地使用现有的vc的数据类型,简化应用程序书写的逻辑,增加程序的可读性。在程序中通过ado的connection和recordset对象可以建立与数据

2、库的连接,并读写数据库中的数据。关键词:vc+ ado 数据库i1、ado概述 ado是microsoft为最新和最强大的数据访问范例ole db而设计的,是一个便于使用的应用程序接口。ado 使您能够编写应用程序以通过 ole.db 提供者访问和操作数据库服务器中的数据。ado 最主要的优点是易于使用、速度快、内存支出少和磁盘遗迹小。ado 在关键的应用方案中使用最少的网络流量,并且在前端 和数据源之间使用最少的层数,所有这些都是为了提供轻量、高性 能的接口。ole db是一组”组件对象模型”(com) 接口,是新的数据库 低层接口,它封装了odbc的功能,并以统一的方式访问存储 在不同信息

3、源中的数据。ole db是microsoft uda(universal data access)策略的技术基础。ole db 为任何数据源提供了高 性能的访问,这些数据源包括关系和非关系数据库、电子邮件 和文件系统、文本和图形、自定义业务对象等等。也就是说ole db 并不局限于 isam、jet 甚至关系数据源,它能够处理 任何类型的数据,而不考虑它们的格式和存储方法。在实际应用中,这种多样性意味着可以访问驻留在 excel 电子数据表、 文本文件、电子邮件/目录服务甚至邮件服务器,诸如 microsoft exchange 中的数据。但是,ole db 应用程序编程接口的目的是为各种应用

4、程 序提供最佳的功能,它并不符合简单化的要求。您需要的 api 应该是一座连接应用程序和 ole db 的桥梁,这就是 activex data objects (ado)。102、ado对象与编程环境2.1 ado对象ado数据库接口是基于对象的集合,ado对象包括connection对象、command对象、recordset对象、field对象、parameter对象、property对象和error对象等,其中connection、command和recordset三个对象是主体对象,它们可以被独立创建和释放。connection对象用来建立和维护与数据源的连接,对数据源的任何操作都需

5、要一个connection对象。recordset对象包含执行数据库操作后返回的一个记录集,通过该对象可以浏览和更新数据库中保存的记录。在vc应用程序中,我们需要使用connection对象建立与数据源的连接,然后通过recordset对象就可以对结果记录集进行浏览、更新等操作。2.2 ado编程环境在vc+程序中使用ado对象,首先需要导入ado动态链接库。引入动态链接库文件的方法是在创建的vc工程的stdafx.h头文件中添加如下代码:#import “c:program filescommon filessystemadom asdo15.dkk”no_nam espace rename

6、(“eof”,“adoeof”)根据windowns操作系统版本不同动态链接库文件可能是msado10.dll、msado15.dll或msado20.dll。在验证时可以根据自己的实际情况进行修改。在以上的代码中,no_namespace表示不使用ado的命名空间,rename(“eof”,”adoeof”)是为了避免冲突,将符号常量表示eof改名为adoeof。行尾添加的“”符号在c+中为续行符,表示将两行视为一行。一般在vc工程应用类的initinstance()成员函数中添加如下初始化com库环境的代码,在结束对ado对象的使用后,需要释放程序占用的com资源。一般是在vc工程应用类的

7、exitinstance()成员函数中添加释放com资源代码。3、建立ado封装类3.1 ado对象基本模型ado模型包含了连接对象、命令对象、域对象、参数对象、记录集对象、错误对象等。在vc中使用ado访问数据库基本过程是:初始化com库,引入ado库文件用connection对象连接数据库利用建立好的连接,通过利用recordset对象取得结果记录集进行查询、处理。使用完毕后关闭连接释放对象3.2基本操作函数和数据结构封装的ado类应包括以下函数和数据结构:1)建立数据库连接函数opendatabase()ado连接数据库首先要用到connection对象,它是到数据库的物理连接,管理着应

8、用程序和数据库之间的通讯。对于大多数的数据库系统,每一 个物理连接都需要耗费大量系统内存,是宝贵的系统资源,不可滥用。考虑到应用程序的效率,每一个数据库客户端都只用一个物理连接,并且应用程序结束后应该 释放。2)关闭数据库连接函数closedatabase()3)sql查询语句函数 select()记录集的建立和查询结果得获取是影响应用程序得效率得关键问题。由于每一次查询结果都可能不一样,所以每个查询语句都要建立一个记录集对象。4)执行无返回结果的sql语句函数excute()5)查询结果数组pdata为了数据类型转换的方便,我们将记录集数据类型都转换为cstring类型,存放在查询结果数组p

9、data中,由于c+的cstring是一个高效和功能强大的类,我们可以很方便地读取记录集中的查询结果。6)结果数组大小nresultrow和nresultcol4、使用ado封装类建立了ado封装类后,使用数据库操作就非常简单了。在需使用数据库查询的cpp文件中包含ado封装类头文件"adodb.h",然后定义一个 cadodb类指针;接下来就是打开数据库连接。使用封装类的成员函数opendatabase(),输入要连接的数据库的dsn名称、用户名和密码, 就与数据库建立连接了。要注意的是如果同时连接多个数据库就要声明多个cadodb对象指针,保证数据库连接对象是全局且惟一

10、。接下来就是,调用成员函数 select取得数据库查询结果,执行完毕后查询结果放在cadodb的成员字符数组指针pdata中,数组大小可以从成员变量nresultrow和 nresultcol中得出。基本步骤如下:在"stdafx.h"中加入ado库的导入语句#import "c:program filescommon filessystemadomsado15.dll" no_namespace rename("eof","adoeof") 在应用程序类中初始化com对象,在initinstance()中加入以下

11、语句afxoleinit();  加入封装类的声明文件#include "adodb.h" 定义封装类对象cadodb ado1; /连接数据库1cadodb ado2; /连接数据库2ado1.opendatabase("数据源名称","用户id","用户密码") /建立连接,第一次连接时调用ado1.select("select * from 表名"); /执行sql查询语句int nrow= ado1.getresultrow(); /取得记录行数int ncol= ado1.g

12、etresultcol(); /取得记录列数for(i=0;i<nrow;i+) /取得查询结果for(j=0;j<ncol;j+)printf("第%d行第%d列的值是%s",i,j,ado1.pdatai*ncol+j;ado1.closedatabase(); /使用完后关闭数据库连接5、用ado对象访问数据库5.1 连接数据库在导入ado dll之后,对于ado的connection、command和recordset三个主体对象,动态链接库为我们生成了3个智能指针:_connectionptr、_commandptr和_recordsetptr。利用_

13、connectionptr智能指针可以建立一个数据库连接,其操作步骤是:首先声明一个_connectionptr指针并调用createinstance()函数创建一个connection对象实例,然后调用open()函数建立到数据源的连接。建立connection对象到数据源连接的open函数的原型为:hresult open(_bstr_tconnectionstring,_bstr_tuserid,_bstr_tpassword,long options);其中参数connectionstring表示连接信息的字符串,userid用于指定连接到数据源的用户id,password用于指定连接

14、到数据源的密码,options用于指明是同步进行还是异步进行,该参数可以是adconnectunspecifiled(同步)和adasyncconnect(异步)两个枚举常量。连接sql server数据库的示例程序代码如下:_connectionptr m_pconn;m_pconn.createinstance(_uuidof(connection);/创建connection对象实例m_pconn->open (“provider=sqlshujuku.1;data source=lgtf;initial catalog=student;user id=sa;password=12

15、3456”,”,”,adconnectunspecified);上面代码中的“sqlshujuku.1”代表数据提供程序,“lgtf”是sql server服务器名,如果是本地服务器,则可以写成“(local)”。“student”是登录的数据库名,“123456”是登录服务器的密码,在验证是可以根据自己的具体情况进行修改。在应用程序中,一般在使用完成数据库后,应该关闭与数据源的连接。ado在关闭连接的同时,也将关闭所有使用这个连接的ado对象。关闭连接的代码:m_pconn->close();m_pconn=nill。5.2 操作记录 在ado数据库编程中,recordset对象代表一

16、个表的记录集合或者是一个sql语句或存储过程的执行结果。通过recordset对象我们就可以进行查询、添加记录、修改记录和删除记录等的操作。5.2.1 打开与关闭记录集 要操作访问记录集,就必须先打开记录集。其操作步骤是:首先声明一个_recordsetptr指针并调用createinstance()函数创建一个rrcordset对象实例,然后调用open()函数打开记录集。open()函数原型如下:hresult open(const_variant_t& source,const_variant_t&activeconnection,enum cursortypeenum

17、cursortype,enum locktypeenum locktype,long options);其中,参数source用于指定打开记录集的数据源,它可以是command对象变量、sql语句、表名或存储过程;activeconnection是一个连接对象的变量名或者是一个包含连接信息的字符串,用于指定是在哪一个连接中打开记录集;cursortype是一个cursortypeenum枚举类型常量,用于指定打开记录集市使用的游标,取值可以是adopenstatic(静态游标)、adopendynamic(动态游标)、adopenforwardonly(前向游标)、和adopenkeyset(

18、键集游标)之一;locktype是一个locktypeenum枚举类型常量,用于指定打开记录集时使用的锁定类型,取值可以是adlockreadonly(只读)、adlockpessimistic(悲观锁定)、adlockoptimistic(乐观锁定)和adlockbatchoptimistic(乐观批量更新)之一。示例程序代码如下:_recordsetptr m_prs;m_prs.createinstance(_uuidof(recordset); /创建recordset对象实例m_prs->open (“select *from addresslist”,m_pconnectio

19、n.getinterfaceptri(),adopendynamic,adlockoptimistic,adcmdtext);对记录集的操作完成后,应关闭记录,释放占用的系统资源。调用recordset对象的close()函数可以关闭记录集,示例代码如下:m_prs.close();m_prs=null;5.2.2 在记录集中定位在记录集被打开后,就可以访问记录集中的当前记录了,但如果要向访问其他记录,就需要在记录集中移动游标来进行定位。recordset对象提供了4个成员函数:movefirst()、movelast()、moveprevious()和movenext(),来帮助我们在记录集中进行定位。如果当前记录是第一条记录,则调用moveprevious()函数后,游标移动到第一条记录的前面,此时,如果进行记录的存取操作或者是再次调用了moveprevious()函数,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论