C 课程设计

发布 2022-09-30 14:34:28 阅读 1616

题目:vc++下使用ado编写数据库程序。

一、ado概述:

ado是microsoft为最新和最强大的数据访问范例ole db 而设计的,是一个便于使用的应用程序接口。ado 使您能够编写应用程序以通过 提供者访问和操作数据库服务器中的数据。ado 最主要的优点是易于使用、速度快、内存支出少和磁盘遗迹小。

ado 在关键的应用方案中使用最少的网络流量,并且在前端和数据源之间使用最少的层数,所有这些都是为了提供轻量、高性能的接口。

ole db是一组“组件对象模型”(com) 接口,是新的数据库低层接口,它封装了odbc的功能,并以统一的方式访问存储在不同信息源中的数据。ole db是microsoft uda(universal data access)策略的技术基础。ole db 为任何数据源提供了高性能的访问,这些数据源包括关系和非关系数据库、电子邮件和文件系统、文本和图形、自定义业务对象等等。

也就是说,ole db 并不局限于 isam、jet 甚至关系数据源,它能够处理任何类型的数据,而不考虑它们的格式和存储方法。在实际应用中,这种多样性意味着可以访问驻留在 excel 电子数据表、文本文件、电子邮件/目录服务甚至邮件服务器,诸如 microsoft exchange 中的数据。但是,ole db 应用程序编程接口的目的是为各种应用程序提供最佳的功能,它并不符合简单化的要求。

您需要的api 应该是一座连接应用程序和 ole db 的桥梁,这就是 activex data objects (ado)。

二、在vc中使用ado

1、引入ado库文件。

使用ado前必须在工程的文件里用直接引入符号#import引入ado库文件,以使编译器能正确编译。**如下所示:

**1:用#import引入ado库文件。

#import "c:\program files\common files\system\ado\"

no_namespaces rename("eof" adoeof")

这行语句声明在工程中使用ado,但不使用ado的名字空间,并且为了避免常数冲突,将常数eof改名为adoeof。现在不需添加另外的头文件,就可以使用ado接口了。

2、初始化ole/com库环境。

必须注意的是,ado库是一组com动态库,这意味应用程序在调用ado前,必须初始化ole/com库环境。在mfc应用程序里,一个比较好的方法是在应用程序主类的initinstance成员函数里初始化ole/com库环境。

**2:初始化ole/com库环境。

bool cadoapp::initinstance()

if(!afxoleinit())

afxmessagebox(“ole初始化出错!”)

return false;

函数afxoleinit在每次应用程序启动时初始化ole/com库环境。同dao和cdatabase一样,ado由几个接口组成:_connectionptr,_commandptr和_recordsetptr.

不同于dao和cdatabase的是,ado基于com的接口。

3、ado接口简介。

ado库包含三个基本接口:_connectionptr接口、_commandptr接口和_recordsetptr接口。

connectionptr接口返回一个记录集或一个空指针。通常使用它来创建一个数据连接或执行一条不返回任何结果的sql语句,如一个存储过程。使用_connectionptr接口返回一个记录集不是一个好的使用方法。

通常同cdatabase一样,使用它创建一个数据连接,然后使用其它对象执行数据输入输出操作。

commandptr接口返回一个记录集。它提供了一种简单的方法来执行返回记录集的存储过程和sql语句。在使用_commandptr接口时,你可以利用全局_connectionptr接口,也可以在_commandptr接口里直接使用连接串。

如果你只执行一次或几次数据访问操作,后者是比较好的选择。但如果你要频繁访问数据库,并要返回很多记录集,那么,你应该使用全局_connectionptr接口创建一个数据连接,然后使用_commandptr接口执行存储过程和sql语句。

recordsetptr是一个记录集对象。与以上两种对象相比,它对记录集提供了更多的控制功能,如记录锁定,游标控制等。同_commandptr接口一样,它不一定要使用一个已经创建的数据连接,可以用一个连接串代替连接指针赋给_recordsetptr的connection成员变量,让它自己创建数据连接。

如果你要使用多个记录集,最好的方法是同command对象一样使用已经创建了数据连接的全局_connectionptr接口,然后使用_recordsetptr执行存储过程和sql语句。

三、使用ado操作。

1、连接数据库。

afxoleinit初始化。

hresult hr;

tryhr = m_""创建connection对象。

if(succeeded(hr))

m_pconnection->connectiontimeout = 0;

hr = m_pconnection->open( "provider= source=

/m_pconnection->putdefaultdatabase ((bstr_t)"db设置默认数据库。

m_m_pcommand->commandtimeout = 5;

m_pcommand->activeconnection = m_pconnection;

catch(_com_error e)//捕捉异常。

cstring errormessage;

连接数据库失败!错误信息:%s",afxmessagebox(errormessage);/显示错误信息。

2、遍历(读取)

用precordset->adoeof来判断数据库指针是否已经移到结果集的末尾了;m_precordset->bof判断是否在第一条记录前面 while(!m_precordset->adoeof)

var = m_precordset->getcollect("name");

if( !vt_null)

strname = lpcstr)_bstr_t(var);

var = m_precordset->getcollect("age");

if( !vt_null)

strage = lpcstr)_bstr_t(var);

m_ strname + strage );

m_precordset->movenext();

3、添加。a)、调用m_precordset->addnew();

b)、调用m_precordset->putcollect();给每个字段赋值。

c)、调用m_precordset->update();确认。

4修改。5删除。

把记录指针移动到要删除的记录上,然后调用。

delete(adaffectcurrent) try

/ 假设删除第二条记录。

m_precordset->movefirst();

m_precordset->move(1

/ 从0开始。

m_precordset->delete(adaffectcurrent);

/ 参数adaffectcurrent为删除当前记录。

m_precordset->update();

catch(_com_error *e)

afxmessagebox(e->errormessage())

6、关闭 记录集或连接都可以用close()方法来关闭。

四、实验步骤。

1、创建数据源。

2、启动visual c++6.0生成一个基于对话框的程序。

3、在对话框界面上进行操作。

4、最终实验的界面如下。

例程2最终界面:

例程3最终界面:

五、实验心得与体会。

在学习这门课程之前,我们已经学过了c语言了,所以一开始对于这门课上手很快。也因此导致了自己对于这门课程开始松懈,具体表现为有时候上课不去,有时候去了也不好好听课,这样学习的直接后果是在实验的时候对于c中不同的类,派生继承的一些东西非常的生疏甚至不懂。对于这些我也非常的后悔,也通过后来的实验上努力的去补。

在做这次实验之前,我一直使用的是vs2010来编写程序的,因为在win7环境下vc++6.0不能完全的兼容(可以使用但是兼容性不好)。为了解决这个问题我采用了安装虚拟机vmware workstation,通过虚拟机安装了一个xp系统,在xp系统中安装vc++6.

0来完成本次的实验。

由于本次实验老师已经给了三个例程,这三个程序中第一个和第三个能够运行,第二个程序中做少许改动就能完成。所以这次实验整体不难,但是要看懂这些并且让自己知道老师的程序要表达什么就比较难了,所以我在网上也找了很多的资料,总体归纳下就像上面写的。可能会和一些同学有重合的地方,但是这些资料都是自己查找并且自己也花了很多时间去思考的。

再说说这次实验的感想吧,做这个实验之前感觉自己什么也不知道什么ado都没听过,但是经过几天的琢磨也能初步的知道了一点只能说皮毛的东西,虽说是皮毛但是自己也挺有成就感的。做这个实验也让我想到了之前自己写18b20程序的时候,也是一开始对18b20完全不了解,但是通过芯片的pdf,根据时序一句句的写程序,最后通过自己的调试能够在液晶上显示温度。当时自己就非常的开心,和这次做完实验的心情一样。

我想在以后的工作中,我们会遇上各种各样的新事物,这些东西可能就是你之前没有学习或者遇到的。对于这些东西,我们首先的态度是不畏惧,接着是埋头苦干,踏踏实实的研究,争取能够征服他们。相对于学习到了ado的一些皮毛,我想这个大概是我这次实验的最大收获。

C 课程设计

自动走迷宫小游戏。根据课堂讲授内容,做相应的自主练习,消化课堂所讲解的内容 通过调试典型例题或习题积累调试c 程序的经验 通过完成辅导教材中的编程题,逐渐培养学生的编程能力 用计算机解决实际问题的能力。同时在设计的过程中发现自己的不足之处,对以前所学过的知识理解的更加深刻,掌握得更加牢固。迷宫生成。...

c 课程设计

哈尔滨 课程设计报告。课程 c 学号 姓名 班级 教师 1.管理系统的功能说明。课程信息管理 能够增加数据,删除数据,显示数据,修改数据,按姓名和首字母查询数据和一些基本的程序功能。2.存储数据的描述。coursenumber 课程号coursename 课程名subject 所属专业xingzhi...

C课程设计

面向对象程序设计课程设计。一 设计要求。1 课程设计以3 4人为一组,每人一个模块 2 课程设计时间为1周 在处理系统的时候,要从分析系统的需求入手,根据系统需求进行详细分析,明确系统功能,然后设计系统整体架构以及划分系统模块,按照模块分配小组中每个组员的具体任务,完成设计。二 系统设计规范。1 命...