《数据库编程-ODBC.ppt》由会员分享,可在线阅读,更多相关《数据库编程-ODBC.ppt(27页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第七章数据库编程7.1 数据库概述数据库概述7.2 ODBC7.3 创建创建ODBC数据库的应用程序数据库的应用程序 7.4 DAO与与ODBC7.5 ADO概述概述本章小结本章小结习题习题 7.1 数据库概述数据库概述 数数据据库库是是数数据据的的集集合合,它它是是由由一一个个或或多多个个表表组组成成。每每个个表表中中都都存存储储了了对对一一类类对对象象的的数数据据描描述述。表表的的每每一一列列描描述述了了对对象象的的一一个个属属性性,而而表表的的每每一一行行则则是是对对一一个个对对象象的的具具体体描描述述。一一般般将将表表中中的的一一行行称称作作记记录录(recordrecord)或或行行
2、(rowrow)。数数据据库库通通常常还还包包括括一一些些附附加加结结构构用用来来维维护护数数据据。若若一一个个数数据据库库只只有有一一个个表表,则则称称之之为为简简单单数数据据库库。若若数数据据库库由由多多个个相相关关的的表表组组成成,则则称称其其为为关关系系数数据据库库。关关系系数数据据库库用用关键字段将它的表联系起来。关键字段将它的表联系起来。DBMS(数据库管理系统)是一套程序,用来定义、管理和处数据库管理系统)是一套程序,用来定义、管理和处理数据库与应用程序之间的联系,例如理数据库与应用程序之间的联系,例如Foxpro、Access、Sybase等等都是都是DBMS。通常使用的数据库
3、都是关系数据库。访问关系数据库通常使用的数据库都是关系数据库。访问关系数据库需要使用某种数据库描述语言,最常用的数据库语言就是结构化查需要使用某种数据库描述语言,最常用的数据库语言就是结构化查询语言。结构化查询语言询语言。结构化查询语言SQL(StructuredQueryLanguage)最早最早由由IBM提出,是专门用来处理关系数据库的基于文本的语言。提出,是专门用来处理关系数据库的基于文本的语言。返回主目录VC的数据库接口vVC提供了多种数据库访问技术:vMFC ODBC:封装了面向对象的数据库类,为不同的数据库提供接口vDAO(数据访问对象):使用数据库引擎访问数据库中的数据vOLE
4、DB:基于组建对象模型的开发技术,可以对关系和非关系数据库提供一致的接口 v这种接口增强了程序的可移植性,属于数据库技术的底层接口vADO(ActiveX数据对象):是面向对象的 OLE DB7.2ODBC1CDatabase类类 CDatabaseCDatabase对对象象表表示示到到一一数数据据源源的的连连接接,通通过过该该连连接接可可以以操操作作数数据据源源。要要使使用用CDatabaseCDatabase,需需先先构构造造CDatabase CDatabase 对对象象,并并调调用用它它的的OpenOpen成成员员函函数数,打打开开一一个个连连接接。然然后后构构造造CRecordset
5、CRecordset对对象象用用于于操操作作所所连连接接的的数数据据源源,向向CDatabaseCDatabase对对象象传传递递记记录录集集构构造造函函数数指指针针。完完成成时时调调用用CloseClose成成员员函函数数并并销销毁毁CDatabaseCDatabase对对象象。成成员员函函数数CloseClose关关闭闭以以前前没没有有关关闭的任何记录集。闭的任何记录集。CDatabaseCDatabase类的成员函数类的成员函数构造构造:CDatabase CDatabase 构构造造一一个个CDatabaseCDatabase对对象象,必必须须通过调用通过调用OpenOpen初始化该对
6、象。初始化该对象。Open Open 打打开开一一个个新新构构造造的的CDatabaseCDatabase对对象,并将它初始化。象,并将它初始化。OpenEx OpenEx 建建立立到到数数据据源源的的一一个个连连接接(通通过过ODBCODBC驱驱 动动 程程 序序),打打 开开 一一 个个 新新 构构 造造 的的CDatabaseCDatabase对象,并将它初始化。对象,并将它初始化。Close Close 关闭与某个数据源的连接。关闭与某个数据源的连接。数据库属性数据库属性:GetConnect GetConnect 返回用于连接返回用于连接CDatabaseCDatabase对象和数据
7、对象和数据源的源的ODBCODBC连接字符串。连接字符串。IsOpen IsOpen 如果如果CDatabaseCDatabase对象当前与数据源连对象当前与数据源连接,则返回非零值;用于检测接,则返回非零值;用于检测CDatabaseCDatabase对象是否对象是否与某个数据源相连。与某个数据源相连。GetDatabaseName GetDatabaseName 返回当前使用的数据库名称。返回当前使用的数据库名称。CanUpdate CanUpdate 如果如果CDatabaseCDatabase可更新(非只读),可更新(非只读),则该函数返回非零;用于检测数据库是否可更新。则该函数返回非
8、零;用于检测数据库是否可更新。数据库操作数据库操作:ExecuteSQL ExecuteSQL 直接执行一条直接执行一条SQLSQL语句。忽略任何结语句。忽略任何结果或错误。果或错误。Cancel Cancel 删除一次异步操作。删除一次异步操作。CRecordset类类提提供供了了应应用用程程序序与与数数据据源源交交互互的的实实际际操操作作.用用来来封封装装对对数数据据库库的的查查询询、修修改改和和删删除除等等操操作作。一一个个Crecordset对对象象代代表表从数据源选出的一组记录集。从数据源选出的一组记录集。构造:构造:CRecordset 构构造造一一个个Crecordset对对象象
9、,应应用用程程序序的的派派生生类类必必须须提供一个调用该成员函数的构造函数。提供一个调用该成员函数的构造函数。Open:Close:记录集属性:记录集属性:CanAppend 如如果果新新记记录录通通过过AddNew成成员员函函数数增增加加到到记记录录集集中中,则返回非零;用于检测某个记录集是否允许用户添加新记录。则返回非零;用于检测某个记录集是否允许用户添加新记录。CanUpdate 检测某个记录集是否能被更新。检测某个记录集是否能被更新。CRecordset类类的成员函数的成员函数GetRecordCount 返回记录集中的记录数目。返回记录集中的记录数目。GetTableName 获取记
10、录集所基于的表名。获取记录集所基于的表名。IsOpen 如果前面已调用如果前面已调用 OpenOpen函数,则返回非零。用函数,则返回非零。用于检测当前记录集合是否已经打开。于检测当前记录集合是否已经打开。IsBOF 用于检测记录指针是否定位在当前记录集合的用于检测记录指针是否定位在当前记录集合的第一个记录的前面。第一个记录的前面。IsEOF 用于检测记录指针是否定位在最后一条记录之用于检测记录指针是否定位在最后一条记录之后。后。IsDeleted如果记录集已定位在一个删除的记录上,则如果记录集已定位在一个删除的记录上,则返回非零。返回非零。记录集更新:记录集更新:AddNew 为增加新记录作
11、准备,然后调用为增加新记录作准备,然后调用UpdateUpdate以完成以完成增加。增加。Close 关闭当前的记录集合。关闭当前的记录集合。Delete 删除当前的记录。删除当前的记录。CancelUpdate取消所有由取消所有由AddNewAddNew或或EidtEidt操作引起发的待操作引起发的待决的更新操作。决的更新操作。Eidt 编辑当前记录。编辑当前记录。记录集导向操作:记录集导向操作:Move 将将记记录录集集双双向向定定位位到到距距离离当当前前记记录录指指定定数数目目记记录录的的位位置。置。Movefirst 将当前记录定位为记录集中的第一个记录。将当前记录定位为记录集中的第一
12、个记录。MoveLast 将当前记录定位为记录集中的最后一个记录。将当前记录定位为记录集中的最后一个记录。MoveNext 将当前记录定位为记录集中的下一个记录。将当前记录定位为记录集中的下一个记录。MovePrev 将当前记录定位为记录集中的前一个记录。将当前记录定位为记录集中的前一个记录。SetAbsolutePosition 将记录集上按指定的记录号定位记录。将记录集上按指定的记录号定位记录。DoFieldExchange 在在多多行行记记录录操操作作尚尚未未完完成成期期间间,在在字字段段和和记录集合之间交换数据。记录集合之间交换数据。其他:其他:Requry 再次运行查询,从而刷新记录
13、再次运行查询,从而刷新记录Cancel 请求数据源取消某个操作。请求数据源取消某个操作。CRecordset CRecordset 类的数据成员有:类的数据成员有:m_m_nFields nFields 当前记录集中的字段数据成员数目。当前记录集中的字段数据成员数目。m_m_nParams nParams 当前记录集中参数数据成员的数目。当前记录集中参数数据成员的数目。m_m_nDatabase nDatabase 指向指向CDatabaseCDatabase对象的指针。通过对象的指针。通过指针将记录集连接到一个数据源指针将记录集连接到一个数据源m_m_strFilter strFilter
14、CString对象对象,包含一个包含一个SQLSQL的的 WHEREWHERE子句。此成员可作用于过滤器。子句。此成员可作用于过滤器。m_strSortCString对象,包含一个对象,包含一个SQLSQL的的ORDEY ORDEY BYBY子句子句CRecordView允允许许使使用用对对话话框框以以数数据据交交换换的的方方式式直直接接从从记记录录集集显显示示数数据据。它它基基本本上上是是一一个个视视图图,从从一一个个对对话话框框模模板板创创建建资资源源,在在对对话话框框模模板板的的控控件件中中显显示示Ceecordset对象的字段。对象的字段。CRecordView对象只有几个成员函数对象
15、只有几个成员函数IsOnFirstRecord用于检测当前记录是否是某个记录用于检测当前记录是否是某个记录集合中的第一个记录;集合中的第一个记录;IsOnLastRecord用于检测当前记录是否是某个记录用于检测当前记录是否是某个记录集合中的最后一个记录;集合中的最后一个记录;OnGetRecordset返回一个指针,指向与当前记录相返回一个指针,指向与当前记录相关连的关连的CRecordset对象;对象;OnMove若当前记录已经改变,在数据源上更新它然若当前记录已经改变,在数据源上更新它然后,后,将记录指针移动到指定的记录上将记录指针移动到指定的记录上3CRecordView类类返回主目录
16、 7.3 创建创建ODBC数据库的应用程序数据库的应用程序 创建创建ODBCODBC数据库程序必须完成以下操作:数据库程序必须完成以下操作:(1 1)注册数据库,建立数据源;注册数据库,建立数据源;(2 2)使用使用AppWizardAppWizard创建基本的数据库应用程序创建基本的数据库应用程序(3 3)显示数据库表的内容。显示数据库表的内容。演示演示书上的书上的MyodbcMyodbc程序程序 返回主目录 用用MFC进一步编写数据库程序进一步编写数据库程序 借助借助CRecordsetCRecordset 类和类和CRecordViewCRecordView类类,可在数据库,可在数据库中
17、实现增加或删除记录等操作。中实现增加或删除记录等操作。继续在上例的基础上演示继续在上例的基础上演示注意注意:CMyodbcViewCMyodbcView类中增加一个保护成员变量类中增加一个保护成员变量flagflag。然后在然后在“CMyodbcViewCMyodbcView”构造函数中初始化变量构造函数中初始化变量flag=FLASEflag=FLASE;添加新的记录添加新的记录:voidCMyodbcView:OnRecordAdd()()/TODO:Addyourcommandhandlercodeherem_pSet-AddNew();();flag=TURE;UpdateData(F
18、ALSE);删除记录:删除记录:voidCMyodbcView:OnRecordDelete()()m_pSet-Delete();();m_pSet-MoveNext();if(m_pSet-IsEoF()()m_pSet-MoveLast();();if(m_pSet-IsBOF()()m_pSet-SetFieldNull(NULL););UpdateData(FALSE););更新操作:更新操作:voidCMyodbcView:OnRecordUpdate()()m_pSet-Edit();();UpdateData(TURE););If(m_pSet-CanUpdate()()m_p
19、Set-Update();();重载虚函数重载虚函数OnMove:程序运行过程中,当用户移动一个数据库记录时,将调用函程序运行过程中,当用户移动一个数据库记录时,将调用函数数CRecordset:OnMove更新数据库。重载该函数主要是为了保更新数据库。重载该函数主要是为了保存新增加的记录存新增加的记录编辑后的编辑后的OnMoveOnMove函数清单如下:函数清单如下:BOOLCMyodbcView:OnMove()if(flag)UpdateData(TRUE);/将输入的数值传给记录集;将输入的数值传给记录集;if(m_pSet-CanUpdate()m_pSet-Update();/更新
20、记录集;更新记录集;elseMessageBox(数据源不能完成更新数据源不能完成更新);flag=FALSE;m_pSet-Requery();/重建记录集重建记录集UpdateData(FALSE);returnTRUE;elsereturnCRecordView:OnMove(nIDMoveCommand);排排 序序 CRecordSet类中有一个数据成员类中有一个数据成员m_strSort,封装了封装了SQL的的ORDERBY的功能,可以通过设置数据成员排序。的功能,可以通过设置数据成员排序。voidCMyvc81View:OnSortLength()m_pSet-Close();/
21、关闭记录集关闭记录集m_pSet-m_strSort=LENGTH;m_pSet-Open();/创建新的记录集创建新的记录集,并打开并打开UpdateData(FALSE);过过 滤滤 void CMyvc81View:void CMyvc81View:OnFilterFactoryOnFilterFactory()()CStringstr,str1;str1=FACTORY;Cfltdlgdlg;if(dlg.DoModal()=IDOK)str=str1+=+dlg.m_fltvalue+;m_pSet-Close();m_pSet-m_strFilter=str;m_pSet-Open
22、();intcount=m_pSet-GetRecordCount();if(count=0)MessageBox(无匹配无匹配记录记录);m_pSet-Close();m_pSet-m_strFilter=;m_pSet-Open();UpdateData(FALSE);7.4 DAO与与ODBCDAODAO类类与与ODBCODBC类类相相比比具具有有很很多多相相似似之之处处,主主要要表表现现为为以以下下几点:几点:DAODAO提提供供了了与与ODBCODBC功功能能相相似似的的MFCMFC类类。例例如如,DAODAO的的CDaoDatabaseCDaoDatabase类类对对应应ODBCO
23、DBC的的CDatabaseCDatabase类类,CDaoRecordsetCDaoRecordset类类对对应应CRecordsetCRecordset类类,CDaoRecordViewCDaoRecordView类类对对应应CRecordViewCRecordView类类,这这些些对对应应的的类类功功能能相相似似,它它们们的的大大部部分分成成员员函函数数都都是是相同的。相同的。二二者者都都支支持持各各种种ODBCODBC数数据据源源的的访访问问;尽尽管管二二者者使使用用数数据据引引擎擎不不同同,但但都都可可以以满满足足用用户户编编写写独独立立于于DBMSDBMS的的应应用用程程序的要求。
24、序的要求。AppWizardAppWizard和和ClassWizardClassWizard对对使使用用DAODAO和和ODBCODBC对对象象的的应应用用程序提供了类似的支持。程序提供了类似的支持。可以很轻松地把数据库应用程序从可以很轻松地把数据库应用程序从ODBCODBC移植到移植到DAODAO。返回主目录ODBCODBC与与DAODAO的不同点在于:的不同点在于:在用在用ClassWizardClassWizard创建创建CDaoRecordsetCDaoRecordset类的派生类时,在类的派生类时,在DatabaseOptionsDatabaseOptions对话框中应该选择对话框
25、中应该选择DAODAO而不是而不是ODBCODBC。而且而且DAODAO的数的数据源是通过选择一个据源是通过选择一个.mdbmdb文件来指定的。文件来指定的。记录集的默认类型不同。记录集的默认类型不同。ODBCODBC记录集的默认类型是快照记录集的默认类型是快照(SnapshotSnapshot),),而而DAODAO则是动态行集(则是动态行集(DynasetDynaset)。)。参数化的方式不同。参数化的方式不同。ODBCODBC使用宏和枚举来定义可用的选项,而使用宏和枚举来定义可用的选项,而DAODAO使用定义的常量。使用定义的常量。ODBCODBC可以用于多种不同的数据库,而可以用于多种
26、不同的数据库,而DAODAO只适用于少数几种数据只适用于少数几种数据库。库。在在ODBC中,中,CDatabase类对象是直接与数据源打交道的;而在类对象是直接与数据源打交道的;而在DAO中,中,CDaoRecordset类对象和类对象和CDaoDatabase类对象之间有一类对象之间有一个个CDaoWorkspace类对象存在,这使得类对象存在,这使得DAO可以同时和多个数据可以同时和多个数据库对象处理事务。库对象处理事务。由于由于OLEDB和和ODBC标准都是为了提供统一的访问数标准都是为了提供统一的访问数据接口,但是,据接口,但是,ODBC标准的对象是基于标准的对象是基于SQL的数据源的
27、数据源(SQL-BasedDataSource),而而OLEDB的对象则是范围的对象则是范围更为广泛的任何数据存储。为了使流行的各种编程语言都更为广泛的任何数据存储。为了使流行的各种编程语言都可以编写符合可以编写符合OLEDB标准的应用程序,微软公司在标准的应用程序,微软公司在OLEDBAPI之上,提供了一种面向对象、与语言无关的应用之上,提供了一种面向对象、与语言无关的应用编程接口,这就是编程接口,这就是ActiveXDataObjects,简称简称ADO7.5 ADO概述概述返回主目录 本章小结本章小结 本本章章我我们们主主要要学学习习了了如如何何使使用用ODBCODBC接接口口来来编编写
28、写一一个个可可以以处处理理任任何何类类型型数数据据库库的的应应用用程程序序。首首先先我我们们认认识识了了有有关关数数据据库库的的一一些些基基本本知知识识,然然后后理理解解了了ODBCODBC的的结结构构,介介绍绍了了使使用用CRecordsetCRecordset类类来来操操作作数数据据库库的的功功能能,并并通通过过一一个个具具体体的的实实例例使使读读者者明明白白如如何何使使用用AppWizardAppWizard提提供供的的功功能能创创建建数数据据库库应应用用程程序序。最最后后对对ODBCODBC和和DAODAO的的技技术术进进行行了了分分析析和和比比较较及及简要介绍了简要介绍了ADOADO技术。技术。返回主目录 习题习题1、什么是什么是ODBCODBC,有什么特点?有什么特点?2 2、与与ODBCODBC有关的类有哪些?各有什么作用?有关的类有哪些?各有什么作用?3 3、在在CRecordsetCRecordset类类中中能能实实现现排排序序、过过滤滤功功能能的成员分别是什么?的成员分别是什么?4 4、利利用用ODBCODBC编编写写一一个个对对学学生生成成绩绩数数据据库库(可可以以为为.mdbmdb或或.dbfdbf)信信息息的的读读取取,并并在在屏屏幕幕上上显显示相关的信息的应用程序示相关的信息的应用程序。返回主目录