第11章数据库应用开发—2_第1页
第11章数据库应用开发—2_第2页
第11章数据库应用开发—2_第3页
第11章数据库应用开发—2_第4页
第11章数据库应用开发—2_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

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

文档简介

1、第11章 数据库应用开发 目 录 数据库系统的体系结构数据库系统的体系结构 11.1 数据库访问技术数据库访问技术 11.2 数据库应用开发实践数据库应用开发实践 11.3 如何访问数据库中的数据 DBA: 通过DBMS工具来访问 如SQL Server的企业管理器、查询处理器 最终用户: 通过客户端工具或应用程序的GUI来访问 如表单、报表等 应用程序员: 通过API来访问 在应用程序中访问 数据库访问技术 数据库访问技术: 为了使不同的程序员能够在各种应用程序中访问不 同的数据库 一组标准化的技术 数据库应用程序的精髓: 标准化的数据库查询语言:SQL 通用的数据库访问技术:ODBC、AD

2、O ODBC API和ODBC库 ODBC:Open DataBase Connectivity,开放数据库 连接 是Microsoft定义的一种数据库访问标准,一个 ODBC应用程序可以访问在本地数据库上的数据, 也可以进行扩展,于访问多种异构平台上的数据 库。 ODBC本质上是一组数据库访问的API。表面上看 ODBC由一组函数组成,实质上其核心是SQL。 ODBC API的主要功能是将SQL语句发送到目标数据 库中,然后对这些语句产生的结果进行处理。 ODBC库是对ODBC API的封装,如MFC ODBC是在 Microsoft MFC中封装了ODBC API的产物。 ODBC体系结构

3、 ODBC组件 应用程序不是直接调用ODBC驱动程序,而是先调 用ODBC驱动程序管理器提供的API,而ODBC驱动 程序管理器再调用相应的ODBC驱动程序,这种间 接的调用方式使得不管是连接到什么数据库都可 以按照一致的方式来调用。 应用程序通过专为DBMS编写的ODBC驱动程序, 而不是直接使用DBMS的工作方式,独立于DBMS。 驱动程序将这些调用转换成DBMS可使用的命令, 因而简化了开发人员的工作,使得广泛的数据源 都可以使用它。 MFC DAO DAO:Data Access Object,数据访问对象 DAO提供一组分层对象,这些对象使用 Microsoft Jet数据库引擎访问

4、下列对象中的 数据和数据库结构 Microsoft Jet (.MDB) 数据库 ODBC数据源,使用ODBC驱动程序 可安装的ISAM数据库(如dBASE和Paradox) 与ODBC一样,DAO提供了一组API,而MFC 也提供了一组DAO类,封装了底层的API, 从而简化了程序的开发 DAO应用程序访问数据的原理 DAO应用程序访问数据的原理 DAO和Jet数据库引擎一起工作。如果该数据库是一个本 地的Access数据库或者其他ISAM类型的数据库,那么Jet 引擎加载相应的数据库驱动程序。如果Jet正在使用远程 数据库,那么该引擎加载ODBC驱动程序管理器,利用 ODBC调用来访问远程

5、ODBC数据库。 ODBC的工作依赖于数据库制造商提供的驱动程序,而 DAO直接利用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的紧密

6、关系,使得它访问ODBC兼容的数据库(如 SQL Server)时具有比DAO更高的性能。 虽然RDO已被后来发展起来的ADO所取代,但是RDO与 ODBC的密切关系使得RDO在某些情况下的性能比ADO更加 突出。 OLE DB OLE DB:Object Linking and Embedding, Database,对象链接嵌入数据库 是Microsoft开发的一种高性能的、基于 COM的数据库技术。 OLE DB和其他Microsoft数据库技术的不同之 处在于其提供通用数据访问的方式: 其一是分布式查询或统一访问多个(分布式)数 据源功能; 其二是能够使非DBMS数据源可由数据库应用程

7、 序访问。 OLE DB使用者和提供者 使用OLE DB的应用程序可以分为两种:OLE DB提供者(OLE DB 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

8、 for ODBC OLE DB Provider for Jet OLE DB Provider for DTS Packages 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包装,允许使用任何数据源, 不只是已索引的、连续的

9、访问方法(ISAM)和基于 SQL的数据库 RDO是ODBC的COM包装。ODBC是一个基于C的API, 允许通用用途(异类)的数据访问。但是,RDO依赖 SQL作为命令语言来访问数据 ADO .NET ADO .NET是微软在.NET Framework中负责数据访问的类库 集,它是基于在COM时代奠基的OLE DB技术以及.NET Framework的类库和编程语言发展而来的,它可以让.NET 上的任何编程语言能够连接并访问关系数据库与非数据库 型数据来源(例如XML,Excel或是文本文档数据),或是 独立出来作为处理应用程序数据的类对象。 在ADO .NET中,可以使用两个组件来访问和

10、处理数 据:.NET Framework数据提供程序(.NET Data Provider)和 DataSet。 .NET Framework数据提供程序 .NET Framework数据提供程序用于连接到数据库、执 行命令和检索结果。 .NET Framework数据提供程序是专门为数据处理以及 快速地只进、只读访问数据而设计的组件: Connection对象提供与数据源的连接。 Command对象使得能够访问用于返回数据、修 改数据、运行存储过程以及发送或检索参数信 息的数据库命令。 DataReader从数据源中提供高性能的数据流。 DataAdapter提供连接DataSet对象和数据

11、源的桥 梁。DataAdapter使用Command对象在数据源中 执行SQL命令,以便将数据加载到DataSet中, 并使得DataSet中的数据更改与数据源保持一致。 ADO .NET DataSet ADO .NET DataSet专门为独立于任何数据源 的数据访问而设计。 它可以用于多种不同的数据源,用于XML数 据,或用于管理应用程序本地的数据。 DataSet包含一个或多个DataTable对象的集 合,这些对象由数据行和数据列以及有关 DataTable对象中数据的主码、外码、约束 和关系信息组成。 ADO .NET结构 JDBC JDBC:Java database conne

12、ctivity,Java数据库连接 是Java语言中用来规范客户端程序如何来访问数据库 的应用程序接口,提供了诸如查询和更新数据库中数 据的方法 JDBC与ODBC: ODBC 不适合直接在 Java 中使用,因为它使用 C 语言接口 JDBC API 对于基本的 SQL 抽象和概念是一种自 然的 Java 接口。它建立在 ODBC 上而不是从零 开始 JDBC 以 Java 风格与优点为基础并进行优化,因 此更加易于使用 Java程序连接数据库的方法 JDBC驱动程序的类型: JDBC-ODBC桥加ODBC驱动程序:利用ODBC驱动 程序提供JDBC访问 本地API:这种类型的驱动通过客户端

13、加载数据 库厂商提供的本地代码库(C/C+等)来访问数据 库 JDBC网络的纯Java驱动程序:这种驱动程序将 JDBC转换为与DBMS无关的网络协议,之后这种 协议又被某个服务器转换为一种DBMS协议 本地协议纯Java驱动程序:这种类型的驱动程 序将JDBC调用直接转换为DBMS所使用的网络协 议 第(3)、(4)类驱动程序将成为从JDBC访问数 据库的首选方法。 数据库访问技术小结(1) ODBC:第一个使用SQL访问不同关系数据库的数据访 问技术 DAO和RDO: ODBC使用低层接口,使用ODBC比较麻烦。 DAO是建立在Microsoft Jet基础之上的,使用 DAO是最快速、最

14、有效地连接Access数据库的方 法。 DAO也可以连接到非Access数据库,但是需要 Jet引擎解释DAO和ODBC之间的调用,这导致了 较慢的连接速度和额外的开销 RDO为ODBC提供了一个COM的封装 RDO的目的是简化ODBC的开发和在Visual Basic 和VBA程序中使用ODBC 数据库访问技术小结(2) OLE DB: OLE DB建立于ODBC之上,并将此技术扩展为提 供更高级数据访问接口的组件结构 OLE DB是一个针对SQL数据源和非SQL数据源(例 如邮件和目录)进行操作的API ADO 类似于ODBC,OLE DB也是属于低层接口,这为 OLE DB的使用带来了障

15、碍 ADO是OLE DB的COM包装 ADO主要为连接的数据访问而设计,这意味着 不论是浏览或更新数据都必须是实时的,这种 连接的访问模式占用服务器端的重要资源 数据库访问技术小结(3) ADO .NET: ADO .NET满足了ADO无法满足的三个重要需求: 提供了离线的数据访问模型,这对Web环境至关重要; 提供了与XML的紧密集成; 还提供了与.NET Framework的无缝集成 JDBC:JDBC是一种用于执行SQL语句的Java API,可以为 多种关系数据库提供统一的访问接口 JDO: 提供了透明的对象存储,存储数据对象完全不需 要额外的代码(如JDBC API的使用) JDO提

16、供到任何数据底层的存储功能,比如关系数 据库、文件、XML及对象数据库等,使得应用可 移植性更强 数据库访问技术小结(4) 数据访问技术的发展呈现出以下态势: 高级化:即对象模型越来越简单,调用越来越容易, 调用方法一般与底层无关; 通用化:即能够以一种统一的方式访问各种异构数 据源,如关系数据库、XML数据、文本等; 高效化:得益于各种优化技术,现在的数据访问技 术能够针对各种数据源采用最合适的访问技术。同 时,离线的数据访问模式大大降低了与服务器的交 互,也减轻了服务器的负担,提高了整体性能。 数据库访问技术的选择: 在.NET环境下开发应用应该首选ADO .NET 在Windows平台非

17、.NET环境下开发应用一般都可以 使用ADO 目 录 数据库系统的体系结构数据库系统的体系结构 11.1 数据库访问技术数据库访问技术 11.2 数据库应用开发实践数据库应用开发实践 11.3 ADO编程对象模型 ADO提供类和对象以完成以下活动: 连接到数据源(Connection),并可选择开始一个事务; 可选择创建对象来表示SQL命令(Command); 可选择在SQL命令中指定列、表和值作为变量参数(Parameter); 执行命令(Command、Connection 或 Recordset); 如果命令按行返回,则将行存储在缓存中(Recordset); 可选择创建缓存视图,以便能

18、对数据进行排序、筛选和定位 (Recordset); 通过添加、删除或更改行和列编辑数据(Recordset); 在适当情况下,使用缓存中的更改内容来更新数据源(Recordset); 如果使用了事务,则可以接受或拒绝在完成事务期间所作的更改 并结束事务(Connection) ADO对象模型中的对象及其说明 对象对象说明说明 Connection代表打开的、与数据源的连接 CommandCommand对象定义了将对数据源执行的指定命令 Parameter 代表与基于参数化查询或存储过程的Command对象相关联的参数或自 变量 Recordset 代表来自基本表或命令执行结果的记录的集合。任

19、何时候,Recordset 对象所指的当前记录均为集合内的单个记录 Field代表使用普通数据类型的数据的列 Error包含与单个操作(涉及提供者)有关的数据访问错误的详细信息 Property代表由提供者定义的ADO对象的动态特性 ADO 数据集合及其说明 集合集合说明说明 Errors包含为响应涉及提供者的单个错误而创建的 所有Error对象。 Fields包含Recordset对象的所有Field对象。 Parameters包含Command对象的所有Parameter对象。 Properties包含指定对象实例的所有Property对象。 ADO对象和数据集合之间的关系 Connect

20、ion 对象 Connection 对象代表打开的、与数据源的连接 用Connection对象的可执行下列操作: 在打开连接前使用ConnectionString、ConnectionTimeout和Mode属性对连接进 行配置 设置CursorLocation属性以便调用支持批更新的“客户端游标提供者” 使用DefaultDatabase属性设置连接的默认数据库 使用IsolationLevel属性为在连接上打开的事务设置隔离级别 使用Provider属性指定OLE DB提供者 使用Open方法建立到数据源的物理连接,使用Close方法将其断开 使用Execute方法执行连接的命令,并使用C

21、ommandTimeout属性对执行进行配 置 使用BeginTrans、CommitTrans和RollbackTrans方法以及Attributes属性管理打开 的连接上的事务(如果提供者支持则包括嵌套的事务) 使用Errors集合检查数据源返回的错误 通过Version属性读取使用中的ADO执行版本 使用OpenSchema方法获取数据库模式信息 Command 对象 Command对象定义了将对数据源执行的指定命 令 使用Command对象可进行下列操作: 使用CommandText属性定义命令(如SQL语句)的可执行文本 通过Parameter对象和Parameters集合定义参数化

22、查询或存储过程参数 使用Execute方法执行命令并在适当的时候返回Recordset对象 执行前应使用CommandType属性指定命令类型以优化性能 使用Prepared属性决定提供者是否在执行前保存准备好(或编译好)的命 令版本 使用CommandTimeout属性设置提供者等待命令执行的秒数 通过设置ActiveConnection属性使打开的连接与Command对象关联 设置Name属性将Command标识为与Connection对象关联的方法 将Command对象传送给Recordset的Source属性以便获取数据 Parameter对象 Parameter对象代表与基于参数化查

23、询或存 储过程的Command对象相关联的参数或自 变量 使用Parameter对象可进行如下操作: 使用Name属性可设置或返回参数名称; 使用Value属性可设置或返回参数值; 使用Attributes和Direction、Precision、 NumericScale、Size以及Type属性可设置或返回 参数特性; 使用AppendChunk方法可将长整型二进制或字 符数据传递给参数 Recordset对象 Recordset对象表示来自基本表或命令执行结果的记录 集合。任何时候,Recordset对象所指的当前记录均为 集合内的单个记录。 使用ADO时,通过Recordset对象可对

24、几乎所有数据进 行操作。所有Recordset对象均使用记录(行)和字段(列) 进行构造。 可以创建所需数量的Recordset对象。 打开Recordset时,当前记录位于第一个记录(如果有), 并且BOF和EOF属性被设置为False。如果没有记录, BOF和EOF属性设置是True。 Recordset对象 可以使用MoveFirst、MoveLast、MoveNext、 MovePrevious和Move方法,以及AbsolutePosition、 AbsolutePage和Filter属性来重新确定当前记录的位置 Recordset对象可支持两类更新: 使用立即更新,一旦调用Upda

25、te方法,对数据 的所有更改将被立即写入基本数据源。也可以 使用AddNew和Update方法将值的数组作为参数 传递,同时更新记录的若干字段。 如果提供者支持批更新,可以使提供者将多个 记录的更改存入缓存,然后使用UpdateBatch方 法在单个调用中将它们传送给数据库。 Field对象 Field对象代表使用普通数据类型的数据的列 使用Field对象可进行如下操作: 使用Name属性可返回字段名; 使用Value属性可查看或更改字段中的数据; 使用Type、Precision和NumericScale属性可返回字段的基本特性; 使用DefinedSize属性可返回已声明的字段大小; 使用

26、ActualSize属性可返回给定字段中数据的实际大小; 使用Attributes属性和Properties集合可决定对于给定字段哪些类型 的功能受到支持; 使用AppendChunk和GetChunk方法可处理包含长二进制或长字符 数据的字段值; 如果提供者支持批更新,可使用OriginalValue和UnderlyingValue属 性在批更新期间解决字段值之间的差异。 Error对象 Error对象包含与单个操作有关的数据访问错误的详细信 通过Error对象可获得每个错误的详细信息,包括: Description属性,包含错误的文本; Number属性,包含错误常量的长整型整数值; So

27、urce属性,标识产生错误的对象。在向数据源发 出请求之后,如果Errors集合中有多个Error对象, 则将会用到该属性; SQLState和NativeError属性,提供来自SQL数据源 的信息。 Property对象 Property对象代表由提供者定义的ADO对象 的动态特征。 ADO对象有两种类型的属性:内置属性和动 态属性 内置属性是在ADO中实现并立即可用于任何新 对象的属性,此时使用MyObject.Property语法。 它们不会作为Property对象出现在对象的 Properties集合中,因此,虽然可以更改它们的 值,但无法更改它们的特性 动态属性由基本的数据提供者定

28、义,并出现在 相应的ADO对象的Properties集合中 基于VC的数据库应用开发 在Visual C+中使用ADO有3种不同的方法: 直接使用ADO Data控件; 使用智能指针操作; 使用Visual C+ Extensions for ADO(简称为ADO Extensions)。由于ADO基于COM技术,因此可以 使用调用COM接口的方式使用ADO 使用ADO Data控件访问数据库 使用智能指针访问数据库 ADO库包含三个智能指针: _ConnectionPtr通常被用来创建一个数据连接或执 行一条不返回任何结果的SQL语句,如一个存储过 程。 _CommandPtr返回一个记录集

29、。它提供了一种简单 的方法来执行返回记录集的存储过程和SQL语句。 在使用_CommandPtr接口时,可以利用全局 _ConnectionPtr接口,也可以在_CommandPtr接口里 直接使用连接串。 _RecordsetPtr是一个记录集对象。与以上两种对象 相比,它对记录集提供了更多的控制功能,如记录 锁定、游标控制等。同_CommandPtr指针一样,它 不一定要使用一个已经创建的数据连接,但如果要 使用多个记录集,最好的方法是同Command对象一 样使用已经创建了数据连接的全局_ConnectionPtr 指针,然后使用_RecordsetPtr执行存储过程和SQL 语句。 使用ADO智能指针来操纵数据库 的方法 引入ADO库文件: #import C:Program Filescommon filessystemadomsado15.dll no_namespace rename(EOF, adoEOF) 初始化OLE/COM库环境 BOOL CMyAdoApp:InitInstance() if (

温馨提示

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

最新文档

评论

0/150

提交评论