




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第11章 数据库应用开发目 录数据库系统的体系结构数据库系统的体系结构11.1数据库访问技术数据库访问技术11.2数据库应用开发实践数据库应用开发实践11.3如何访问数据库中的数据 DBA: 通过DBMS工具来访问 如SQL Server的企业管理器、查询处理器 最终用户: 通过客户端工具或应用程序的GUI来访问 如表单、报表等 应用程序员: 通过API来访问 在应用程序中访问数据库访问技术 数据库访问技术: 为了使不同的程序员能够在各种应用程序中访问不同的数据库 一组标准化的技术 数据库应用程序的精髓: 标准化的数据库查询语言:SQL 通用的数据库访问技术:ODBC、ADOODBC API和
2、ODBC库 ODBC:Open DataBase Connectivity,开放数据库连接 是Microsoft定义的一种数据库访问标准,一个ODBC应用程序可以访问在本地数据库上的数据,也可以进行扩展,于访问多种异构平台上的数据库。 ODBC本质上是一组数据库访问的API。表面上看ODBC由一组函数组成,实质上其核心是SQL。 ODBC API的主要功能是将SQL语句发送到目标数据库中,然后对这些语句产生的结果进行处理。 ODBC库是对ODBC API的封装,如MFC ODBC是在Microsoft MFC中封装了ODBC API的产物。ODBC体系结构ODBC组件 应用程序不是直接调用OD
3、BC驱动程序,而是先调用ODBC驱动程序管理器提供的API,而ODBC驱动程序管理器再调用相应的ODBC驱动程序,这种间接的调用方式使得不管是连接到什么数据库都可以按照一致的方式来调用。 应用程序通过专为DBMS编写的ODBC驱动程序,而不是直接使用DBMS的工作方式,独立于DBMS。驱动程序将这些调用转换成DBMS可使用的命令,因而简化了开发人员的工作,使得广泛的数据源都可以使用它。MFC DAO DAO:Data Access Object,数据访问对象 DAO提供一组分层对象,这些对象使用Microsoft Jet数据库引擎访问下列对象中的数据和数据库结构 Microsoft Jet (
4、.MDB) 数据库 ODBC数据源,使用ODBC驱动程序 可安装的ISAM数据库(如dBASE和Paradox) 与ODBC一样,DAO提供了一组API,而MFC也提供了一组DAO类,封装了底层的API,从而简化了程序的开发DAO应用程序访问数据的原理DAO应用程序访问数据的原理 DAO和Jet数据库引擎一起工作。如果该数据库是一个本地的Access数据库或者其他ISAM类型的数据库,那么Jet引擎加载相应的数据库驱动程序。如果Jet正在使用远程数据库,那么该引擎加载ODBC驱动程序管理器,利用ODBC调用来访问远程ODBC数据库。 ODBC的工作依赖于数据库制造商提供的驱动程序,而DAO直接
5、利用Microsoft Jet引擎提供的数据库访问对象集进行工作,这使得DAO在访问Access、FoxPro、dBase、Paradox、Excel等数据库时具有更好的性能。RDO RDO:Remote Data Objects,远程数据对象 作为DAO的继承者,RDO将数据访问对象DAO提供的易编程性和ODBC API提供的高性能有效地结合在一起。 DAO是一种位于Microsoft Jet引擎之上的对象层,而RDO封装了ODBC API的对象层。RDO没有Jet引擎的高开销,再加上与ODBC的紧密关系,使得它访问ODBC兼容的数据库(如SQL Server)时具有比DAO更高的性能。 虽
6、然RDO已被后来发展起来的ADO所取代,但是RDO与ODBC的密切关系使得RDO在某些情况下的性能比ADO更加突出。OLE DB OLE DB:Object Linking and Embedding, Database,对象链接嵌入数据库 是Microsoft开发的一种高性能的、基于COM的数据库技术。 OLE DB和其他Microsoft数据库技术的不同之处在于其提供通用数据访问的方式: 其一是分布式查询或统一访问多个(分布式)数据源功能; 其二是能够使非DBMS数据源可由数据库应用程序访问。OLE DB使用者和提供者 使用OLE DB的应用程序可以分为两种:OLE DB提供者(OLE D
7、B Provider)和OLE DB使用者(OLE DB Consumer)OLE DB提供者 OLE DB使用者就是使用OLE DB接口的应用程序。 OLE DB提供者则负责访问数据源,并通过OLE DB接口向OLE DB使用者提供数据。 与ODBC类似,每一个不同的OLE DB数据源都是用自己相应的OLE DB提供者。 SQL Server 2000中包含了以下OLE DB提供者: OLE DB Provider for SQL Server OLE DB Provider for ODBC OLE DB Provider for Jet OLE DB Provider for DTS P
8、ackages OLE DB Provider for Oracle通过OLE DB提供者访问不同的数据源ADO ADO:ActiveX Data Objects技术 ADO是基于OLE DB的访问接口,它继承了OLE DB技术的优点,并且对OLE DB的接口做了封装,定义了ADO对象,简化了程序的开发。 ADO是DAO/RDO的后继产物,ADO 2.0在功能上与RDO更相似,区别在于: ADO是OLE DB的COM包装,允许使用任何数据源,不只是已索引的、连续的访问方法(ISAM)和基于SQL的数据库 RDO是ODBC的COM包装。ODBC是一个基于C的API,允许通用用途(异类)的数据访问
9、。但是,RDO依赖SQL作为命令语言来访问数据ADO .NET ADO .NET是微软在.NET Framework中负责数据访问的类库集,它是基于在COM时代奠基的OLE DB技术以及.NET Framework的类库和编程语言发展而来的,它可以让.NET上的任何编程语言能够连接并访问关系数据库与非数据库型数据来源(例如XML,Excel或是文本文档数据),或是独立出来作为处理应用程序数据的类对象。 在ADO .NET中,可以使用两个组件来访问和处理数据:.NET Framework数据提供程序(.NET Data Provider)和DataSet。.NET Framework数据提供程序
10、 .NET Framework数据提供程序用于连接到数据库、执行命令和检索结果。 .NET Framework数据提供程序是专门为数据处理以及快速地只进、只读访问数据而设计的组件: Connection对象提供与数据源的连接。 Command对象使得能够访问用于返回数据、修改数据、运行存储过程以及发送或检索参数信息的数据库命令。 DataReader从数据源中提供高性能的数据流。 DataAdapter提供连接DataSet对象和数据源的桥梁。DataAdapter使用Command对象在数据源中执行SQL命令,以便将数据加载到DataSet中,并使得DataSet中的数据更改与数据源保持一致
11、。ADO .NET DataSet ADO .NET DataSet专门为独立于任何数据源的数据访问而设计。 它可以用于多种不同的数据源,用于XML数据,或用于管理应用程序本地的数据。 DataSet包含一个或多个DataTable对象的集合,这些对象由数据行和数据列以及有关DataTable对象中数据的主码、外码、约束和关系信息组成。ADO .NET结构JDBC JDBC:Java database connectivity,Java数据库连接 是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法 JDBC与ODBC: ODBC 不适合直接
12、在 Java 中使用,因为它使用 C 语言接口 JDBC API 对于基本的 SQL 抽象和概念是一种自然的 Java 接口。它建立在 ODBC 上而不是从零开始 JDBC 以 Java 风格与优点为基础并进行优化,因此更加易于使用Java程序连接数据库的方法 JDBC驱动程序的类型: JDBC-ODBC桥加ODBC驱动程序:利用ODBC驱动程序提供JDBC访问 本地API:这种类型的驱动通过客户端加载数据库厂商提供的本地代码库(C/C+等)来访问数据库 JDBC网络的纯Java驱动程序:这种驱动程序将JDBC转换为与DBMS无关的网络协议,之后这种协议又被某个服务器转换为一种DBMS协议 本
13、地协议纯Java驱动程序:这种类型的驱动程序将JDBC调用直接转换为DBMS所使用的网络协议 第(3)、(4)类驱动程序将成为从JDBC访问数据库的首选方法。数据库访问技术小结(1) ODBC:第一个使用SQL访问不同关系数据库的数据访问技术 DAO和RDO: ODBC使用低层接口,使用ODBC比较麻烦。 DAO是建立在Microsoft Jet基础之上的,使用DAO是最快速、最有效地连接Access数据库的方法。 DAO也可以连接到非Access数据库,但是需要Jet引擎解释DAO和ODBC之间的调用,这导致了较慢的连接速度和额外的开销 RDO为ODBC提供了一个COM的封装 RDO的目的是
14、简化ODBC的开发和在Visual Basic和VBA程序中使用ODBC数据库访问技术小结(2) OLE DB: OLE DB建立于ODBC之上,并将此技术扩展为提供更高级数据访问接口的组件结构 OLE DB是一个针对SQL数据源和非SQL数据源(例如邮件和目录)进行操作的API ADO 类似于ODBC,OLE DB也是属于低层接口,这为OLE DB的使用带来了障碍 ADO是OLE DB的COM包装 ADO主要为连接的数据访问而设计,这意味着不论是浏览或更新数据都必须是实时的,这种连接的访问模式占用服务器端的重要资源数据库访问技术小结(3) ADO .NET: ADO .NET满足了ADO无法
15、满足的三个重要需求: 提供了离线的数据访问模型,这对Web环境至关重要; 提供了与XML的紧密集成; 还提供了与.NET Framework的无缝集成 JDBC:JDBC是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一的访问接口 JDO: 提供了透明的对象存储,存储数据对象完全不需要额外的代码(如JDBC API的使用) JDO提供到任何数据底层的存储功能,比如关系数据库、文件、XML及对象数据库等,使得应用可移植性更强数据库访问技术小结(4) 数据访问技术的发展呈现出以下态势: 高级化:即对象模型越来越简单,调用越来越容易,调用方法一般与底层无关; 通用化:即能够以一
16、种统一的方式访问各种异构数据源,如关系数据库、XML数据、文本等; 高效化:得益于各种优化技术,现在的数据访问技术能够针对各种数据源采用最合适的访问技术。同时,离线的数据访问模式大大降低了与服务器的交互,也减轻了服务器的负担,提高了整体性能。 数据库访问技术的选择: 在.NET环境下开发应用应该首选ADO .NET 在Windows平台非.NET环境下开发应用一般都可以使用ADO目 录数据库系统的体系结构数据库系统的体系结构11.1数据库访问技术数据库访问技术11.2数据库应用开发实践数据库应用开发实践11.3ADO编程对象模型 ADO提供类和对象以完成以下活动: 连接到数据源(Connect
17、ion),并可选择开始一个事务; 可选择创建对象来表示SQL命令(Command); 可选择在SQL命令中指定列、表和值作为变量参数(Parameter); 执行命令(Command、Connection 或 Recordset); 如果命令按行返回,则将行存储在缓存中(Recordset); 可选择创建缓存视图,以便能对数据进行排序、筛选和定位(Recordset); 通过添加、删除或更改行和列编辑数据(Recordset); 在适当情况下,使用缓存中的更改内容来更新数据源(Recordset); 如果使用了事务,则可以接受或拒绝在完成事务期间所作的更改并结束事务(Connection)AD
18、O对象模型中的对象及其说明对象对象说明说明Connection代表打开的、与数据源的连接CommandCommand对象定义了将对数据源执行的指定命令Parameter代表与基于参数化查询或存储过程的Command对象相关联的参数或自变量Recordset代表来自基本表或命令执行结果的记录的集合。任何时候,Recordset对象所指的当前记录均为集合内的单个记录Field代表使用普通数据类型的数据的列Error包含与单个操作(涉及提供者)有关的数据访问错误的详细信息Property代表由提供者定义的ADO对象的动态特性ADO 数据集合及其说明集合集合说明说明Errors包含为响应涉及提供者的单
19、个错误而创建的所有Error对象。Fields包含Recordset对象的所有Field对象。Parameters包含Command对象的所有Parameter对象。Properties包含指定对象实例的所有Property对象。ADO对象和数据集合之间的关系Connection 对象 Connection 对象代表打开的、与数据源的连接 用Connection对象的可执行下列操作: 在打开连接前使用ConnectionString、ConnectionTimeout和Mode属性对连接进行配置 设置CursorLocation属性以便调用支持批更新的“客户端游标提供者” 使用DefaultD
20、atabase属性设置连接的默认数据库 使用IsolationLevel属性为在连接上打开的事务设置隔离级别 使用Provider属性指定OLE DB提供者 使用Open方法建立到数据源的物理连接,使用Close方法将其断开 使用Execute方法执行连接的命令,并使用CommandTimeout属性对执行进行配置 使用BeginTrans、CommitTrans和RollbackTrans方法以及Attributes属性管理打开的连接上的事务(如果提供者支持则包括嵌套的事务) 使用Errors集合检查数据源返回的错误 通过Version属性读取使用中的ADO执行版本 使用OpenSchema
21、方法获取数据库模式信息Command 对象 Command对象定义了将对数据源执行的指定命令 使用Command对象可进行下列操作: 使用CommandText属性定义命令(如SQL语句)的可执行文本 通过Parameter对象和Parameters集合定义参数化查询或存储过程参数 使用Execute方法执行命令并在适当的时候返回Recordset对象 执行前应使用CommandType属性指定命令类型以优化性能 使用Prepared属性决定提供者是否在执行前保存准备好(或编译好)的命令版本 使用CommandTimeout属性设置提供者等待命令执行的秒数 通过设置ActiveConnecti
22、on属性使打开的连接与Command对象关联 设置Name属性将Command标识为与Connection对象关联的方法 将Command对象传送给Recordset的Source属性以便获取数据Parameter对象 Parameter对象代表与基于参数化查询或存储过程的Command对象相关联的参数或自变量 使用Parameter对象可进行如下操作: 使用Name属性可设置或返回参数名称; 使用Value属性可设置或返回参数值; 使用Attributes和Direction、Precision、NumericScale、Size以及Type属性可设置或返回参数特性; 使用AppendChu
23、nk方法可将长整型二进制或字符数据传递给参数Recordset对象 Recordset对象表示来自基本表或命令执行结果的记录集合。任何时候,Recordset对象所指的当前记录均为集合内的单个记录。 使用ADO时,通过Recordset对象可对几乎所有数据进行操作。所有Recordset对象均使用记录(行)和字段(列)进行构造。 可以创建所需数量的Recordset对象。 打开Recordset时,当前记录位于第一个记录(如果有),并且BOF和EOF属性被设置为False。如果没有记录,BOF和EOF属性设置是True。Recordset对象 可以使用MoveFirst、MoveLast、Mo
24、veNext、MovePrevious和Move方法,以及AbsolutePosition、AbsolutePage和Filter属性来重新确定当前记录的位置 Recordset对象可支持两类更新: 使用立即更新,一旦调用Update方法,对数据的所有更改将被立即写入基本数据源。也可以使用AddNew和Update方法将值的数组作为参数传递,同时更新记录的若干字段。 如果提供者支持批更新,可以使提供者将多个记录的更改存入缓存,然后使用UpdateBatch方法在单个调用中将它们传送给数据库。Field对象 Field对象代表使用普通数据类型的数据的列 使用Field对象可进行如下操作: 使用N
25、ame属性可返回字段名; 使用Value属性可查看或更改字段中的数据; 使用Type、Precision和NumericScale属性可返回字段的基本特性; 使用DefinedSize属性可返回已声明的字段大小; 使用ActualSize属性可返回给定字段中数据的实际大小; 使用Attributes属性和Properties集合可决定对于给定字段哪些类型的功能受到支持; 使用AppendChunk和GetChunk方法可处理包含长二进制或长字符数据的字段值; 如果提供者支持批更新,可使用OriginalValue和UnderlyingValue属性在批更新期间解决字段值之间的差异。Error对
26、象 Error对象包含与单个操作有关的数据访问错误的详细信 通过Error对象可获得每个错误的详细信息,包括: Description属性,包含错误的文本; Number属性,包含错误常量的长整型整数值; Source属性,标识产生错误的对象。在向数据源发出请求之后,如果Errors集合中有多个Error对象,则将会用到该属性; SQLState和NativeError属性,提供来自SQL数据源的信息。Property对象 Property对象代表由提供者定义的ADO对象的动态特征。 ADO对象有两种类型的属性:内置属性和动态属性 内置属性是在ADO中实现并立即可用于任何新对象的属性,此时使用
27、MyObject.Property语法。它们不会作为Property对象出现在对象的Properties集合中,因此,虽然可以更改它们的值,但无法更改它们的特性 动态属性由基本的数据提供者定义,并出现在相应的ADO对象的Properties集合中基于VC的数据库应用开发 在Visual C+中使用ADO有3种不同的方法: 直接使用ADO Data控件; 使用智能指针操作; 使用Visual C+ Extensions for ADO(简称为ADO Extensions)。由于ADO基于COM技术,因此可以使用调用COM接口的方式使用ADO使用ADO Data控件访问数据库使用智能指针访问数据库
28、 ADO库包含三个智能指针: _ConnectionPtr通常被用来创建一个数据连接或执行一条不返回任何结果的SQL语句,如一个存储过程。 _CommandPtr返回一个记录集。它提供了一种简单的方法来执行返回记录集的存储过程和SQL语句。在使用_CommandPtr接口时,可以利用全局_ConnectionPtr接口,也可以在_CommandPtr接口里直接使用连接串。 _RecordsetPtr是一个记录集对象。与以上两种对象相比,它对记录集提供了更多的控制功能,如记录锁定、游标控制等。同_CommandPtr指针一样,它不一定要使用一个已经创建的数据连接,但如果要使用多个记录集,最好的方法是同Command对象一样使用已经创建了数据连接的全局_ConnectionPtr指针,然后使用_RecordsetPtr执行存储过程和SQL语句。使用ADO智能指针来操纵数据库的方法 引入ADO库文件:#import C:Program Filescommon filessystemadomsado15.dll no_namespacerename(EOF, adoEOF) 初始化OLE/COM库环境BOOL CMyAdoApp:InitInstance() if ( !AfxOleIn
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 乙方商铺租赁合同范本
- 出让合同范本官网
- 个人催债合同范本
- 2025年遵义a2货运从业资格证考试
- 借款合同和抵押合同范例
- 劳务合同范本保密条款
- 东营市劳动合同范本
- 低成本创业合同范本
- 个人室内植物租赁合同范本
- 弃土场土方外运施工方案
- 辽宁省营口市2024-2025学年七年级上学期期中语文试题
- 《画垂线和平行线》(教案)2023-2024学年数学四年级上册
- GB/T 44770-2024智能火电厂技术要求
- 经典女士剪发技术图解教程
- 2023年护理人员分层培训、考核计划表
- 第二章-高压开关电器
- 肿瘤病人的姑息治疗和护理
- 人工智能在人力资源招聘中的创新应用
- 静脉采血的课件
- 三年级数学-数独练习题打印版10组
- DB3502T 051-2019 家政服务规范 通 用要求
评论
0/150
提交评论