Visual-C++程序设计教程第九章.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《Visual-C++程序设计教程第九章.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Visual C+ 程序设计 教程 第九
- 资源描述:
-
1、第9章 数据库编程9.1 数据库概述n数据库技术是应用数据管理应用的需要而产生,与数据存储技术的发展与应用密切相关。数据库从20世纪60年代中期产生至今,已经经历了三代的演变,目前已经发展成为一个庞大的数据库家族。9.1.1数据库和数据库和DBMSn数据库是数据的集合,它由一个或多个表组成,每一个表中都存储了对一类对象的数据描述和相应性质的数据集合。数据表由列和行构成,所以又称二维数据表。数据表中的每一列描述了对象的一个属性,表的每一行则是对一个对象的具体描述。一般将表中的一行称为记录(record),将每一列称为字段(field)。另外,数据库通常还包括一些附加结构,用来维护数据。n一般情况
2、下,数据库是根据相应的数据模型来分类的,数据模型反映了数据与数据之间的关系。根据数据模型可以将数据库划分为以下3类:层次型数据库、网状型数据库、关系型数据库。9.1.1数据库和数据库和DBMSn计算机数据处理的核心问题是数据管理技术,也就是对数据进行分类、组织、存储、检索和维护的技术。数据管理技术随着计算机软硬件和计算机应用的发展而不断地发展,主要经历了人工管理阶段、文件系统阶段、数据库系统阶段、分布式数据库系统阶段和面向对象数据库系统阶段。n数据库管理系统(DBMS)是数据库的核心,用来定义、管理和处理数据库与应用程序之间的联系,它能支持多个用户同时以最快的速度大量存入或取出数据。现在我们经
3、常使用的数据库管理系统有Microsoft SQL Server,Oracle Server,Microsoft Access,Microsoft Visual Foxpro等。9.1.1数据库和数据库和DBMSn一个数据库系统,一般包括数据、数据库、数据库管理系统、应用程序、数据库系统。其中数据库管理系统是数据库系统的核心,主要功能如下:n数据定义功能:定义数据库的逻辑结构和数据库对象。n数据查询功能:数据库检索。n数据操作功能:数据库的添加与修改。n数据控制功能:数据存取与更新、完整性与安全性。9.1.2结构化查询语言结构化查询语言SQLSQL是Structured Query Langu
4、age(结构化查询语言)的缩写,是关系数据库的标准语言,也是数据库领域使用最广泛的语言。SQL具有以下特点:1.综合统一的语言综合统一的语言 2.非过程化的语言非过程化的语言 3.面向集合的操作方式面向集合的操作方式4.所有关系数据库的公共语言所有关系数据库的公共语言 9.1.2结构化查询语言结构化查询语言SQLSQL语言包括数据定义语言、数据查询语言、数据操纵语言和数据控制语言等,下面详细介绍这些语言的使用方法。1SQL查询语句查询语句SQL查询语句主要用于从数据库中检索数据。数据查询语言主要包括SELECT等命令,SELECT命令的基本语法格式如下:SELECT字段名,FROMWHEREG
5、ROUP BYHAVINGORDER BY9.1.2结构化查询语言结构化查询语言SQL2SQL数据操纵语句数据操纵语句数据操纵语言是Data Manipulation Language的缩写,主要是用于添加、修改和删除数据库记录。数据操纵语言主要包括INSERT、UPDATE、DELETE等命令,详细用法如下:1)添加记录添加记录添加记录的基本格式如下:INSERT INTO(,)VALUES(,);说明:指定要添加记录的基本表名称。:指定记录字段的值。9.1.2结构化查询语言结构化查询语言SQL2)更新记录更新记录更新记录的基本语法格式如下:UPDATE SET=,=WHERE;说明:指定要
6、更新记录的基本表名称。:指定要更新记录的字段。:将指定的字段的值更新为表达式的值。3)3)删除记录删除记录 删除记录的基本语法格式如下:DELETE FROM WHERE;9.1.2结构化查询语言结构化查询语言SQL3SQL其他语句其他语句除了数据查询语句,数据操纵语句,SQL还有很多其他的语句,如数据定义语句,数据控制语句等等,下面将分别介绍这些语句的功能和用法。数据定义语句是Data Definition Language的缩写,主要用于定义表、视图或索引,主要包括CREATE、ALTER、DROP等命令。创建基本表的基本语法格式如下:创建基本表的基本语法格式如下:CREATE TABLE
7、(,),);说明:所要定义的基本表名称。:指定该表的字段名。:指定字段的数据类型,不同的数据库系统支持的数据类型不完全相同。:指定字段或表的完整性约束条件。9.1.2结构化查询语言结构化查询语言SQL数据控制语句:数据控制语句:数据控制语句主要用于对基本表和视图进行授权,描述完整性规则和控制事务。数据控制语句主要包括GRAND、COMMIT、ROLLBACK等命令。在Visual C+6.0访问数据库中很少涉及到部分内容,因此详细使用方法就不作介绍。9.1.3数据库访问模式数据库访问模式VC+6.0和数据库是两种不同的软件系统平台,为了实现不同平台之间的数据交流,VC+6.0提供了对数据库访问
8、的全面支持,主要的数据库访问技术概括起来有5种:1.ODBC API;2.MFC ODBC类;3.MFC DAO类;(数据访问对象)4.MFC的OLE/DB;5.ActiveX数据对象(ADO)。9.1.3数据库访问模式数据库访问模式1.ODBC API 最初出现于20世纪80年代末,ODBC是数据库应用程序访问的一个统一接口,对于不同的数据库,ODBC提供了一套统一的编程接口API。任何应用程序,只要系统包含有某数据库的确ODBC驱动程序,就可以使用其API来访问该数据库。ODBC结构是分层管理的,从上至下分别为应用程序层、ODBC接口层、驱动程序管理器、驱动程序、数据源。最开始,ODBC是
9、作为编写访问关系数据库的应用程序所提供的一种统一的接口。但现在,ODBC已经成为一种标准,目前的数据库系统一般都提供了驱动程序,这使得ODBC的应用范围十分广泛,基本上可以用于所有的数据库系统。9.1.3数据库访问模式数据库访问模式2.MFC ODBC2.MFC ODBCnMFC1.5后的版本里引入封装了ODBC功能的类。通过这些类提供与ODBC的接口,使得用户可以不须处理ODBC API中的繁杂处理就可以进行数据库操作。主要的MFC ODBC类如下:nCDatabase类:一个CDatabase对象表示一个到数据源的连接,通过它可以操作数据源。应用程序可使用多个CDatabase对象。nCR
10、ecordSet类:一个CRecordSet对象代表一个从数据源选择的一组记录的集合-记录集。记录集有两种形式:snapshot和dynaset。前者表示数据的静态视图,后者表示记录集与其他用户对数据库的更新保持同步。通过CRecordSet对象,用户可以对数据库中的记录进行各种操作。nCRecordView类:CRecordView对象是在空间中显示数据库记录的视图。这种视图是一种直接连到一个CRecordSet对象的格式视图,它从一个对话框模板资源创建,并将CRecordSet对象的字段显示在对话框模板的控件里。对象利用DDX和RFX机制,使格式上的控件和记录集的字段之间数据移动自动化,也
11、就是说,用户甚至不要编写一行代码就可以实现简单的数据库记录查看程序。9.1.3数据库访问模式数据库访问模式3.DAO3.DAO DAO是Data Access Object(数据访问对象)的缩写。通过Microsoft Access/Jet数据加引擎,可以访问Access数据库中的数据。nDAO为用户提供了以下的数据访问对象:n数据库对象(Database Object)n表定义对象(TableDef Object)n查询定义对象(QueryDef Object)n记录集对象(RecordSet Object)9.1.3数据库访问模式数据库访问模式4.4.OLE DBOLE DBnOLE DB
12、是微软的战略性的通向不同的数据源的低级应用程序接口。OLE DB不仅包括微软资助的标准数据接口开放数据库连通性(ODBC)的结构化问题语言(SQL)能力,还具有面向其他非SQL数据类型的通路。作为微软的组件对象模型(COM)的一种设计,OLE DB是一组读写数据的方法(在过去可能被称为渠道)。nOLE DB试图提供一种统一的数据访问接口,并能处理处理标准的关系性数据库中的数据之外,还能处理包括邮件数据、Web上的文本、图形、目录服务以及主机系统中的IMS和VSAM数据。OLE DB提供一个数据库编程COM接口,使得数据的使用者(应用程序)可以使用同样的方法访问各种数据,而不用考虑数据的具体存储
13、地点、格式和类型。这个COM接口与ODBC相比,其健壮性和灵活性要高的多。9.1.3数据库访问模式数据库访问模式5.ActiveX5.ActiveX数据对象数据对象(ADO)(ADO)n是微软提供的面向对象的接口,与OLE DB类似,但接口更简单,具有更广泛的特征数组和更高程度的灵活性。ADO基于COM,提供编程语言可利用的对象,除了面向VC+,还提供面向其他各种开发工具的应用,如VB,VJ等。ADO在服务器应用方面非常有用,特别是对于动态服务器页面ASP(Active Server Page)。nADO对象结构类似于OLE DB,但并不依靠对象层次。大多数情况下,用户只需要创建并只使用需要处
14、理的对象。下面的对象类组成了ADO接口。nConnection:用于表示与数据库的连接,以及处理一些命令和事务。9.2 MFC ODBC数据库访问技术数据库访问技术n在Visual C+中,MFC封装的ODBC数据库类包括CDatabase(数据库类)、CRecordSet(记录集类)和CrecordView(记录视图类),更为用户提供了切实可行的解决方案。9.2.1 MFC的ODBC过程 使用MFC ODBC类访问数据库,主要有以下几个步骤:1.建立数据库 建立数据库就是用户根据自己的需要设计数据库中的表及各表之间的依赖关系。要想设计一个完整的数据库,首先必须了解数据库的基本知识。2.配置数
15、据源n数据库设计建立完成后,它只是单独的几张表,并不能在程序中去访问它,因为程序并不知道数据库在哪里。此时就需要在应用程序和数据库之间建立连接了。n配置数据源其实就是为数据库创建一个对外的窗口,应用程序通过这个窗口来访问数据库中的数据。3.数据库的连接n建立完数据库,又配置好了数据源,接下来就可以在程序中通过数据源来访问数据库了,其步骤如下:n(1)首先要在程序中引入MFC ODBC数据库的定义文件:n#include n(2)定义CDataBase数据库对象:nCDataBase m_dbn(3)利用CDataBase类的OpenEx函数建立和数据库的连接。n4.数据库操作n在完成了上面的步
16、骤后,就可以使用相应的SQL语句对数据库进行浏览、添加、删除、修改等操作了。9.2.2 MFC的的ODBC类类1CDatabase 类类 CDatabase类派生于CObject类。MFC的CDatabase类用来封装应用程序对数据库链接的处理,一个CDatabase对象就代表一个数据源的链接。数据源可以是SQL Server、Access、Borland dBASE和xBASE等数据库管理系统的数据实例,而链接可以是通过网络与一个数据库服务器的连接,也可以是在本地机上用来跟踪程序对一个数据库操作的设置。一个应用程序可以同时拥有多个激活的CDatabase 对象。CDatabase类的成员函数
17、直接与ODBC API相对应。n1)建立数据库链接n为使用CDatabase,需要构造一个CDatabase对象,然后紧接着调用Open()或OpenEx()成员函数,以打开一个数据库链接,因为在用它创建记录集(recordset)对象前必须对其进行初始化。当用户构造了CRecordset对象来对链接的数据源操作时,把记录集构造函数的指针传送给CDatabase对象。其中OpenEx()是优先选择的,因为它使用起来更为方便。n其函数原型如下:nVirtual BOOL OpenEX(LPCTSTR lpszConnectString,DWORD dwOptions=0);nThrow(CDBE
18、xception,CMemoryException);n若链接成功,则函数返回非零值,否则,若在出现的要求更多的链接信息对话框时选择了Cancle,则函数返回值为零。在其他情况下,都将产生异常。n2)设置超时时间n如果是通过网络与一个数据库服务系统连接,耗费的时间可能要比单机长一些,在此期间可能发生错误。可以用SetLoginTimeout()设置应用程序等待建立链接的时间,其原型为:nvoid SetLoginTimeOut(DWORD dwSeconds);n参数dwSeconds为尝试链接的秒数。n3)获取链接信息n可以随时用IsOpen()函数来查看CDatabase对象是否已经链接到
19、数据源,用GetConnect()得到链接数据库的链接字符串,用GetDatabaseName()查看数据源名字。它们的原型如下:nBOOL IsOpen()const;nConst CString&GetConnect()const;nCString GetDatabaseName()const;n其中,若CDatabase对象已经链接,则IsOpen()返回非零值;GetConnect()返回的是一个CString对象的const指针,带有数据库链接字符串,若还没有调用OpenEx()或Open()建立链接,则返回空的字符串;GetDatabaseName()返回一个带数据源名字的CStr
20、ing对象,若没有数据源,则返回空字符串。n4)用CDatabase:ExecuteSQL()执行SQL语句n对于返回结果集的一般查询,使用CRecordset很容易。然而,可以不用CRecordset执行不返回结果集的SQL语句,而是通过调用CDatabase类的CDatabase:ExecuteSQL()成员函数执行。其函数原型如下:nvoid ExecuteSQL(LPCTSTR lpszSQL);nThrow(CEBException);n参数lpszSQL是一个带SQL语句字符串的指针。n2.CRecordset类的使用nCRecordset类派生于CObject类。虽然CDatab
21、ase类允许对一个数据库执行SQL语句,但实际上是CRecordset 类提供了应用程序与数据交互的实际操作。CRecordset类用来封装数据库的查询,包括记录的插入、修改、删除等操作。n记录集主要分为快照集(Snapshot)和动态集(Dynaset)两种,CRecordset类对这两者都支持。动态记录集能保持与其他用户所做的更改同步;静态记录集则是数据的一个静态视图。每一种形式的记录集在被打开时都提供一组记录,所不同的是,当在一个动态集里滚动到一条记录时,由其他用户或用户自己的应用程序中的其他记录集对该记录所做的更改会相应地显示出来。n记录集对象一般都可以进行如下的操作:在记录间滚动、更
展开阅读全文