ImageVerifierCode 换一换
格式:DOC , 页数:86 ,大小:1.56MB ,
资源ID:2243262      下载积分:18 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/2243262.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(数据库编程.doc)为本站上传会员【精****】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

数据库编程.doc

1、个人收集整理 勿做商业用途 第14章 数据库编程 用户 用户 数据库(database)是存储在计算机里的结构化数据的集合,可以分为关系、层次和网络三种类型,通常由数据库管理系统(DBMS = DataBase Management System)软件(如Oracle、DB2、SQL Server等)对数据库进行管理,应用程序通过(标准)编程接口(如ODBC/JDBC、DAO/ADO。NET、DOM/SAX等)来访问数据库,参见图14-1. 数据库管理系统 …… 图14-1 数据库应用系统结构 Visual Studio为程序员提供了多种数据库编程的接口和类库,传统

2、上是采用MFC进行ODBC、DAO和ADO编程,现在则一般采用C# 和VB进行ADO。NET的Web应用编程。 14。1 数据库与编程接口 关系型数据库可以视为结构变量的集合,有专用的系统RDBMS进行管理,通过标准的查询语言SQL进行操作.微软平台中有多种数据库编程接口可供使用,早期常用ODBC和DAO,现在则多为ADO.NET。 14。1。1 数据库与DBMS 数据库(DataBase,DB)是一种记录(record)或数据的集合。数据库的结构按一定的数据模型来组织,最常用的是关系模型(relational model),其它还有层次模型(hierarchical model)

3、和网络模型(network model)。 DBMS(DataBase Management System,数据库管理系统)是用来维护数据库的软件。数据库模型决定访问数据库的查询语言。但是,DBMS的大量内部操作则是独立于数据模型的,它们取决于诸如性能(performance)、并发性(concurrency)、完整性(integrity)和从硬件故障中恢复等管理因素。在这些方面,不同的产品之间存在很大差异。 早期的计算机数据存储在穿孔卡片和磁带上,后来有了磁盘的文件系统,然后才是数据库管理系统。DBMS所用的各种数据库模型中,最初是网络和层次型数据库的强势,后来是关系数据库一统天下,然后

4、又时兴面向对象的数据库,现在热门的则是XML这种层次型数据库。 最早的DBMS出现在1960年代,先驱者之一是(图灵奖获得者)Charles Bachman,他设计了首批DBMS之一IDS(Integrated Data Store,集成数据存储,1960年通用电气GE公司)及其后续版本IDMS(Integrated Database Management System,集成数据库管理系统,1971年推出,可在IBM大型机上运行),因其高性能,曾被业界广泛使用. 1.三种数据库模型 依据数据组织的方式,可以将数据库划分成如下三种模型: l 网络型——典型的网络数据库模型是(COBOL语

5、言的开发者)CODASYL(Conference on Data Systems Languages,数据系统语言协会)下属的DBTG(Data Base Task Group,数据库工作组),在Charles Bachman思想的基础上开发的,于1969年发布了网络数据库模型语言规范——通常称为Codasyl数据模型。上面提到的IDS和IDMS就是网络型数据库管理系统。 l 层次型——层次模型将数据组织成(一)父(多)子关系的树状结构,IBM公司于1968年推出的IMS(Information Management System,信息管理系统,由Vern Watts主持开发)就是一种层次型

6、数据库管理系统,它在1970~1980 年代占DBMS的统治地位。现在十分热门的XML数据库也属于层次模型。 l 关系型——关系数据库模型(relational database model)最早由IBM公司的Edgar F。 Codd于1969年提出,但最初并没有受到足够的重视,例如IBM于1970年代开发的System R也只是一个研究原型。只是到了1980年代后,关系数据库才异军突起,并迅速独霸天下.主流的商用关系数据库管理系统(RDBMS = Relational DBMS)有Oracle、DB2、SQL Server和MySQL等。 网络模型可真实反映现实世界中,事物之间所存在的

7、错综复杂的网状相互关系(如人际关系)。层次模型可以看成是网络模型的子集或特例(如家族谱系),多个层次模型可以组成一个网路模型.关系模型反映的则是事物间的链接或二元关系(如父子关系、夫妻关系等),简单且高效.层次和网络模型可以用多个二元关系来表示。 2.关系数据库模型 关系数据库由表示二元关系的实体--表(table)所组成,表中的列(column)称为字段(field)、行(row)称为记录(record).如: 表12-1 学生信息表 元数据→ 学号 姓名 性别 年龄 身高 电话 记录 → 1001 张三 男 20 1.80 1234

8、5678 → 1002 李四 女 18 1.61 23456789 → 1003 王五 男 21 1.72 34567890 ↑ ↑ ↑ ↑ ↑ ↑ 字段 以程序员的观点,可以将关系数据库看成是特定结构变量的数组,数据库中的字段或列对应于结构中的字段,而数据库中的记录或行则可以看成是结构变量的一个个具体取值.如: typedef struct { int num; // ? wchar_t name[5]; wchar_t sex; int age; float stature; int phone;

9、 // ? } StInfo; StInfo st; st.num = 004; st。name[0] = L'马'; st.name[1] = L'六'; st。name[2] = 0; st。sex = L'男’; st.age = 19; st。stature = 1.68; st。phone = 45678901; 在编程中还用游标(cursor)来表示表中的当前记录、用事务(transaction)来表示封装在一起的一组表的变化(可以解决数据库的完整性问题). 虽然用户可以自己编写程序来控制数据库文件的访问,但RDBMS能给我们带来许多便利,如

10、 l 使用标准的文件格式——如含单个表的dBASE/Xbase的DBF(Data Base File数据库文件)、单个文件可含数据库的所有表和索引的Microsoft Access的MDB(Microsoft [Access] DataBase微软[访问]数据库)文件 l 索引文件访问——所有DBMS都包含非常高效的索引访问例程,避免(为了使用关键字来访问记录)用户自己编写二叉树等文件访问程序的麻烦 l 数据完整性保护——专业DBMS大多含有对数据的保护例程,如在对含一系列变化的事务处理过程中,若不能处理整个事务,则会回滚以恢复事务处理前的原始状态 l 多用户访问控制——大多数DBM

11、S都提供记录加锁机制,以防止多个用户同时使用时的相互干扰。一些多用户DBMS采用C/S模型,其他采用P2P模式,都可以控制对共享文件的访问 3.商用RDBMS 最早的商用关系型数据库管理系统是甲骨文(Oracle)公司于1979年推出的Oracle(神谕, 预言)和IBM公司于1983年推出的DB2. 首个成功的微机(包括PC)上的RDBMS是C。 Wayne Ratliff于1978年在(美国)国家航空和宇宙航行局NASA的喷气推进实验室JPL开发的dBase,它在DOS时代占统治地位。它最初叫Vulcan,1980年代初被Ashton—Tate公司购买后,才改名为dBase。1991

12、年Ashton-Tate公司被Borland公司收购。 dBase有许多变种,如狐狸软件公司于1984年推出的FoxBASE,后来改名为FoxPro。1992年被微软公司合并后,又改名为Visual FoxPro。其它变种还有Arago、Force、dbFast、dbXL、Quicksilver、Clipper、Xbase++、FlagShip、Recital、CodeBase、MultiBase和Harbour/xHarbour等,它们一般被统称xBase。 PC上的另一个出名的RDBMS是Ansa Software 公司的Richard Schwartz和Robert Shostak于

13、1985年开发的Paradox(悖论),1987年9月被Borland公司收购,1992年推出了其Windows版.Corel公司于1990年代中从Borland公司获得了Paradox,并于1997年发布了Corel Paradox 8,它还将Paradox集成到其WordPerfect Office专业版套件中. 曾经重要的大型关系数据库还有Informix软件公司于1985年推出的Informix(2001年4月被IBM收购)和Sybase公司于1987年开发的SQL Server(1988年它与微软合作为IBM开发SQL Server for OS/2,1993年在合作协议终止后,微

14、软推出了自己的SQL Server to Windows NT)。 现在非常热门的开源Web数据库MySQL也是一种RDBMS,它是由瑞典的MySQL AB公司于1995年5月23日开始推出的,2008年2月26日MySQL AB成为Sun的子公司。 目前绝大多数数据库都为关系型数据库,对应的管理软件为关系型数据库管理系统RDBMS。目前主流的RDBMS有: l 甲骨文公司的Oracle l IBM公司的DB2(和Informix) l 微软公司的SQL Server(和Visual FoxPro、Access、Excel) l MySQL AB公司的MySQL 常用数据库文件的

15、扩展名见表12—2: 表12—2 数据库文件的扩展名 Access DB2 dBase Excel FoxPro Oracle Paradox SQL Server *。mdb *。dbf *.xls *.dbf *。db *。mdf、*。sdf 4.SQL SQL(Structured Query Language,结构化查询语言)(官方读作[ɛskju:’ɛl],也读作['si:kwəl])为关系数据库的通用查询语言,最初是由IBM公司San Jose实验室的Donald D. Chamberlin和Raymond F。 Boyce于1972年为

16、System R关系数据库设计的. 1)标准 SQL于1986年和1987年分别成为美国国家标准学会ANSI和国际标准化组织ISO标准——SQL—86(SQL—87),在1989年、1992年、1999年、2003年和2006年又多次对其进行了修订——SQL—89、SQL—92(SQL2)、SQL:1999(SQL3)、SQL:2003和SQL:2006 (ISO/IEC 9075)。 下面是当前最新的ISO/IEC 9075标准系列: l ISO/IEC 9075-1:2003 (Ed. 2) Information technology -- Database languages

17、 —- SQL —- Part 1: Framework (SQL/Framework),信息科学—-数据库语言—-SQL-—第1部分:框架(SQL/框架) l ISO/IEC 9075—2:2003 (Ed. 2) Information technology -— Database languages —- SQL —- Part 2: Foundation (SQL/Foundation),信息科学——数据库语言——SQL-—第2部分:基础(SQL/基础) l ISO/IEC 9075—3:2003 (Ed。 3) Information technology -— Datab

18、ase languages -— SQL —— Part 3: Call-Level Interface (SQL/CLI),信息科学——数据库语言——SQL--第3部分:调用级接口(SQL/CLI) l ISO/IEC 9075-4:2003 (Ed. 3) Information technology —- Database languages -— SQL -— Part 4: Persistent Stored Modules (SQL/PSM),信息科学——数据库语言——SQL--第4部分:持久存储模块(SQL/PSM) l ISO/IEC 9075-9:2003 (Ed。 2

19、) Information technology -- Database languages -— SQL -— Part 9: Management of External Data (SQL/MED),信息科学——数据库语言——SQL—-第9部分:外部数据管理(SQL/MED) l ISO/IEC 9075-10:2003 (Ed. 2) Information technology -- Database languages -- SQL -- Part 10: Object Language Bindings (SQL/OLB),信息科学——数据库语言——SQL-—第10部分:对

20、象语言绑定(SQL/OLB) l ISO/IEC 9075-11:2003 (Ed。 1) Information technology —- Database languages -— SQL —— Part 11: Information and Definition Schemas (SQL/Schemata),信息科学——数据库语言——SQL——第11部分:信息与定义模式(SQL/模式) l ISO/IEC 9075-13:2003 (Ed. 2) Information technology -— Database languages —- SQL -— Part 13: S

21、QL Routines and Types Using the Java TM Programming Language (SQL/JRT),信息科学——数据库语言——SQL-—第13部分:使用Java TM编程语言的SQL例程与类型(SQL/JRT) l ISO/IEC 9075-14:2006 (Ed. 2) Information technology —— Database languages -- SQL —— Part 14: XML—Related Specifications (SQL/XML),信息科学-—数据库语言——SQL——第13部分:XML相关规范(SQL/XML

22、) 虽然许多DBMS支持SQL,广大程序员也熟悉SQL,但SQL标准仍处于不断变化之中,而且在不同的产品之间的SQL的语法也各不相同,如一些多媒体、面向对象、分布式和XML数据库的扩展. 2)语言 SQL包括查询(query)、操作(Manipulation)、定义(definition)和控制(control)四种功能。SQL有三种基本的语句形式: l 数据定义语言(DDL = Data Definition Language)-—用于在数据库中建立数据结构和生成对象,如表(TABLE)、索引(INDEX)和视图(VIEW)。DDL是用三种动词来操作数据库中的对象: n CREAT

23、用于产生新对象,如CREAT 表名(列名1, 列名2, ...) n ALTER用于修改现成的对象,如ALTER TABLE 表名 COLUMN 列名 数据类型 n DROP用于移走对象,如DROP TABLE 表名 CASCADE l 数据控制语言(DCL = Data Control Language)--用于给处理的数据库对象授予用户优先权,优先权包括: n SELECT允许用户查询数据行 n INSERT允许用户加入新行 n DELETE允许用户删除行 n UPDATE允许用户修改行 n REFERENCES当表的索引涉及另一个表中的列时,允许用户修改所涉及的表 用G

24、RAND语句来授权,用REVOKE语句来取消授权,如: GRAND SELECT ON Tab1 TO ID, Name, Age REVOKE SELECT ON Tab1 FROM Name l 数据操作语言(DML = Data Manipulation Language)——用于数据处理,如添加、删除、修改和查询等。具体语句有: n SELECT语句用于从数据库中选出数据,其最简单的形式为: SELECT 选项列表 FROM 表名 其中的选项列表可以是字段、文本或它们的组合;也可以用*表示全选。SELECT语句有很多附加部分,包括:从句(WHERE和ORDER BY)、表达

25、式、谓词(LIKE、IN、BETWEEN)、关键字(DISTINCT)、集合、联合和外部联合、相关名称、ODBC SQL文本值、SQL函数、及子查询与联合查询等。其中的WHERE从句还广泛用于DELETE、UPDATE等其他语句中 n INSERT语句用于把行插入表中,其基本形式为: INSERT INFO 表名 [(列的列表)] VALUES(值的列表) n DELETE语句用于删除表中的行:DELETE FROM 表名 [WHERE范围] n UPDATE语句用来修改数据库中的现行值: UPDATE 表名 SET 列名1=表达式1,列名2=表达式2,..。[WHERE从句] 1

26、4。1。2 数据库编程接口 存在多种数据库编程接口,最通用的是ODBC和JDBC。可以根据自己不同的平台和需要,作出合适的选择。 在Windows平台的数据库接口中,传统的是ODBC,流行的则是ADO和ADO。NET。 1.数据库接口 Visual Studio中提供了如下数据库接口: l ODBC(Open DataBase Connectivity,开放式数据库连接)-—为不同的数据库资源提供一个标准接口,是目前Windows应用程序中应用最广泛的底层数据库接口,已经成为工业标准。为了方便ODBC使用,MFC对ODBC进行了封装,针对ODBC原始简单的函数型API,建立了一些抽

27、象类:CDatabase(数据库)、CRecordset(记录集)和CRecordView(记录视图),参见图14-2. 图14—2 MFC中ODBC和ADO接口的数据库支持类 l DAO(Data Access Objects,数据访问对象)——微软为自己的Jet (喷气式/喷射)数据库Access(*.MDB)所设计的一种专用数据库编程接口,可提供比ODBC更丰富的功能(如支持数据库定义语言DDL及可访问表与列结构)和更快捷的访问,并在MFC原有的ODBC类基础上,建立了一系列新类CDao*:CDaoDatabase(数据库)、CDaoRecordset(记录集)和CDaoR

28、ecordView(记录视图)及CDaoTableDef(表定义)、CDaoQueryDef(查询定义)、CDaoWorkspace(工作空间) ,参见图14-2。 l OLE DB(Object Linking and Embedding DataBase,对象链接和嵌入数据库)-—是一个独立于数据源的、基于COM(Component Object Model,组件对象模型)的网络数据库底层接口,功能强大、访问灵活、使用广泛。OLE DB框架定义了三个基本类:数据提供者(data provider)、用户(consumer,消费者)和服务提供者(service provider),参见图1

29、4—3。 用户 应用程序与工具 ADO OLE DB OLE DB 服务提供者 数据提供者 游标 引擎 查询 引擎 制作 引擎 ODBC SQL ISAM 电子 表格 目录 服务 文件 系统 图14—3 ADO和OLE DB架构 l ADO(ActiveX Data Object,ActiveX数据对象)—-由于OLE DB太过底层,不太容易使用(似COM),也不合适于做VB与JScript的接口.为了满足日常数据源开发的需要,并且作为ODBC和DAO的逻辑扩展,微软推出了建立在OLE DB基础上的高层数据库接口ADO(似Activ

30、eX),特别适用于ASP(Active Server Page,动态服务器网页)Web应用程序的开发,参见图14—3和4。 图14—4 数据库接口 l ADO。NET——.NET平台的数据库编程接口,主要为基于消息的Web应用程序而设计,可以访问关系数据库和XML结构,参见图14—5。其核心类是.NET框架的System.Data命名空间中的DataSet(数据集)。在ADO。NET中,可以按传统逐行(记录)访问(连接型)数据库,也可以按网络数据库中流行的数据集的方法来访问(断开型)数据库.在。NET中,对关系数据库源,一般通过.NET框架的数据提供程序(data provide

31、r)来访问。.NET框架中包含的数据提供程序(使用的命名空间)有:针对SQL Server(System.Data.SqlClient)、OLE DB(System.Data.OleDb)、ODBC(System。Data.Odbc)、Oracle(System。Data.OracleClient)等的.NET框架数据提供程序。 CLR 客户端应用程序 DataSet Rows .NET框架 数据供应链 XML 文档 DBMS Windows 图14-5 ADO.NET允许.NET应用程序访问 存储于DBMS和XML文档中的数据 l LINQ——Vi

32、sual Studio 2008 版和。NET框架的3.5版,引入了LINQ(Language Integrated Query,语言集成查询)功能,该功能将一组通用的标准查询运算符集成到了Visual C# 和Visual Basic的语言语法中.LINQ引入了标准易学的数据查询和更新模式,并可以扩展以支持可能的任何数据类型。Visual Studio 2008包括LINQ 提供程序的程序集,借助这些程序集,可以启用。NET框架集合 (LINQ to Objects)、SQL 数据库 (LINQ to SQL)、ADO。NET数据集 (LINQ to DataSet) 以及XML文档 (LI

33、NQ to XML) 等的语言集成查询,参见图14—6。 图14-6 LINQ访问数据 n 跨数据源和数据格式—-查询是一种从数据源检索数据的表达式。查询通常用专门的查询语言来表示.随着时间的推移,人们已经为各种数据源开发了不同的语言;例如,用于关系数据库的SQL和用于XML的XQuery。因此,开发人员不得不针对他们必须支持的每种数据源或数据格式而学习新的查询语言。LINQ通过提供一种跨各种数据源和数据格式使用数据的一致模型,简化了这一情况。在LINQ查询中,始终会用到对象。可以使用相同的基本编码模式来查询和转换XML文档、SQL数据库、ADO.NET 数据集、。NET 集合中

34、的数据以及对其有LINQ提供程序可用的任何其他格式的数据。 n 查询操作的三个部分——所有 LINQ 查询操作都由以下三个不同的操作组成:获取数据源、创建查询、执行查询,参见图14-7。 图14-7 完整的LINQ查询操作 n C# 例子: class IntroToLINQ { static void Main() { // The Three Parts of a LINQ Query: // 1. Data source. int[] numbers = new int[7] { 0, 1, 2, 3, 4

35、 5, 6 }; // 2. Query creation。 var numQuery = // numQuery is an IEnumerable〈int〉 from num in numbers where (num % 2) == 0 select num; // 3。 Query execution. foreach (int num in numQuery) { Console。Write(”{0,1}

36、", num); } } } 2.接口的选择 如果你使用Java编程,不论你使用何种操作系统,JDBC都唯一的数据库接口选择. 如果你使用MFC进行非.NET编程,可有多种数据库接口供选择:标准的ODBC最通用、DAO只适合于微软的Access数据库、OLE DB功能强大但是编写麻烦、ADO则不仅功能强大而且使用方便。 如果你编写.NET的数据库应用程序,唯一的选择是ADO.NET接口,但是可以使用任何支持。NET的编程语言,如C++/CLI、C#、VB、JScript、J# 等.不过,如果你在VS08中使用C# 和VB编程,则还可以选择LINQ功能来访问

37、数据库。 参见图14—8。 图14—8 编程语言与数据库接口 由于时间有限,本课程只简单介绍ODBC的MFC编程、ADO.NET和LINQ的C# 编程。如果对DAO、OLE DB、ADO、JDBC等编程有兴趣,可以自己找资料看。 14.2 ODBC的MFC编程 ODBC(Open DataBase Connectivit,开放式数据库连接)是微软公司对国际标准CLI(Call-Level Interface,调用级接口)的一种商业实现,是Windows环境下,不同类型数据库的一个通用编程接口. 14。2.1 ODBC ODBC是国际标准的微软实现,具有基于DLL的模

38、块化结构.可以直接在ODBC的API层次上进行C语言程序设计,但通常是利用ODBC的C++类封装,进行面向对象的MFC编程. 1.ODBC标准 CLI是由SAG(SQL Access Group,SQL访问组)于1992年制定的数据库访问方法标准,1995年成为国际标准(1999年和2003年又分别对其进行了更新): l ISO/IEC 9075-3:1995/1999/2003 Information technology -- Database languages -— SQL -— Part 3: Call—Level Interface (SQL/CLI),信息技术-数据库语言—

39、SQL—第3部分:调用级接口(SQL/CLI)。 ODBC(Open DataBase Connectivity,开放式数据库连接)是微软对CLI的商业实现,推出的版本有:1.0(1992年9月)、2。0(1994)、3。0(1996)、3。5(1997?)、4.0(2001?)。微软的ODBC不仅定义了SQL的语法,而且定义了C语言同SQL数据库之间的程序设计接口,可以对任何带有ODBC驱动程序的DBMS进行访问。 ODBC是不同类型数据库的一个通用接口,它们是Windows的一些简单的函数型API。利用ODBC API编写的应用程序独立于具体的RDBMS,实现了应用程序对不同DBMS的

40、共享.这些是靠各个DBMS的ODBC驱动程序(driver)来做到的,VC++2008中提供了下列DBMS的驱动程序:SQL Server、Microsoft Access、Microsoft Excel、dBASE、Paradox、Microsoft Oracle ODBC、文本文件。 2.ODBC的结构 ODBC是一种基于DLL的系统完全模块化的独特结构,高层为一个定义了应用程序设计接口的小DLL——ODBC32。DLL,在应用程序的执行过程中,ODBC32。DLL会调用特定数据库的驱动程序DLL。借助于[由“控制面板/管理工具/数据源(ODBC)”管理模块所维护的]Windows注册

41、表,ODBC32。DLL可跟踪哪个数据库的驱动程序DLL可用,允许单个程序同时访问多个DBMS中的数据。32位ODBC的DLL层次结构见下图: MFC数据库应用程序 ODBC32.DLL 驱动程序管理器 ODBCJT32.DLL Jet控制器 ODBCCR32.DLL 游标库 MSJT40.DLL Jet数据库引擎 SQL Server ODBC驱动程序 MSXBDE40.DLL Xbase驱动程序 局部DBF文件 局部MDB文件 远程共享数据库 SQL Server 图14-9 ODBC结构 3.ODBC SDK编程 如果直接在ODBC的C语言A

42、PI层次上进行程序设计,必须了解通过句柄来访问的三个非常重要的ODBC元素: l 环境(enviroment)——我们首先需要一个环境来建立程序与ODBC系统之间的联系.一个应用程序通常只有一个环境句柄 l 连接(connection)——然后我们需要有一个或多个连接来建立驱动程序与数据源之间的特定组合关系.一些特定的ODBC连接可以固定地编入程序中,也可让用户从可以获得的驱动程序及数据源列表中进行选择.如ODBC32.DLL具有一个内部对话框,它列出了在Windows注册表中(的HKEY_LOCAL_MACHINE\ SOFTWARE\ODBC目录下)定义的所有连接。 l 语句(sta

43、tement)--一旦获得了连接,还需要SQL语句来执行各种操作,如查询、修改、添加、删除等.例如: 查询:SELECT FNAME, LNAME, CITY FROM AUTHORS WHERE STATE = ‘UT' ORDER BY LNAME 修改:UPDATE AUTORS SET PHONE = ’801 232—5780’ WHERE ID = ’357-86—4343' 由于查询语句需要一个程序来循环地对结果进行处理,因此,程序可能需要有若干个语句同时处于活动状态.许多ODBC驱动程序都允许每个连接可由多个处于活动状态的语句来控制. ODBC允许用户将查询的结果定义成

44、一个与SQL语句关联在一起的称为行集(rowset)的数据块,通过ODBC的SDK函数SQLExtendedFetch,用户程序可以借助于ODBC游标在所选择的若干记录之间来回移动,此游标是一个可编程的志向行集的指针。 行集可以是动态的,一旦数据库发生变化(如当某个用户程序正在行集中浏览时,另一个程序却修改或删除了行集中某个记录),ODBC会立刻对数据进行更新.称动态行集为“动态集”(dynaset)。 ODBC的游标库模块ODBCCR32.DLL支持称为“快照”(snapshots)的静态行集,当执行SELECT语句时,ODBC会将所选择的若干记录进行备份,并且在内存中建立指向这些记录的

45、指针。这样在用户浏览它们时,它们不会发生任何变化;但在多用户情况下,可能需要不时对数据库进行重新查询,以便重新建立快照来反映数据库的变化。 其他 选择或分类 更新、删除、插入 第1步:建立连接 SQLAllocHandle(ENV):创建环境句柄 SQLSetEnvAttr:设置环境句柄属性 SQLAllocHandle(DBC):创建连接句柄 SQLConnect:建立连接 SQLSetConnectAttr:设置连接属性 第2步:初始化 SQLGetInfo:获取信息 SQLAllocHandle(STMT):创建语句句柄 SQLSetStmtAttr:设置语句属

46、性 第3步:执行 分类函数 SQLExecDirect (BindParameters) 语句类型? 第4步(a):提取数据结果 SQLNumResultCols SQLFetch SQLGetData或 SQLBindCol(SQLDescribeCol) SQLCloseCursor 第4步(b):获取行数 SQLRowCount 第5步:事务结束 SQLEndTran 第6步:断开连接 SQLFreeHandle(STMT) SQLDisconnect SQLFreeHandle(DBC) SQLFreeHandle(ENV) 图14-10

47、ODBC API应用程序框架 14.2。2 MFC的ODBC类 借助于MFC的ODBC类,可以用对象来代替连接句柄和语句句柄,但环境句柄不是由C++对象来表示的,二是被保存在一个全局变量中。 两个最主要的ODBC类为: l CDatabase类-—其对象代表与数据源的ODBC连接,用户一般不需要从它派生类 l CRecordset类-—其对象代表可滚动行集(通常为快照),用户一般需要从它派生自己的类,以便和数据库表中的列项匹配. 为了与VB和Access保持一致,在MFC和文档中用“记录集”代替了“行集”。图14—11是MFC的ODBC类与数据库的关系图: CDatabase对

48、象 m_hdbc CRecordset派生类对象 m_pDatabase m_hstmt ODBC连接 数据库 ODBC行集 动态集或快照 图14-11 MFC ODBC类与数据库的关系 1.CDatabase类 CDatabase类是MFC基类CObject的直接派生类: CObject → CDatabase CDatabase类提供了对ODBC数据库连接的抽象,一个CDatabase类的对象就代表了一个与ODBC数据源的连接(该数据源可以是本地的,也可以是网上的),一个应用程序可以拥有多个激活的CDatabase对象. 表12—3为CDataba

49、se类的成员,其中的许多成员函数都直接与ODBC的C语言API函数相对应。 表12—3 CDatabase类的成员 类成员 功能 数据成员 m_hdbc ODBC数据源的连接句柄,类型为HDBC 构造 CDatabase 构造一个CDatabase空对象,必须调用Open[Ex]初始化 Open 通过驱动程序建立一个数据源的连接 OpenEx 通过驱动程序建立一个数据源的连接 Close 关闭与数据源的连接 数据库属性 GetConnect 返回连接CDatabase对象与一数据源的ODBC连接串 IsOpen 若接CDatabase对象正与一数据源连

50、接着,则返回非0 GetDatabaseName 返回正在使用的数据库名称 CanUpdate 若数据库可更新(非只读),则返回非0 CanTranscat 若数据源支持事务,则返回非0 SetLoginTimeout 设置连接数据库尝试的超时秒数 SetQueryTimeout 设置查询连接数据库的超时秒数,影响所有随后的对Open、AddNew、Edit、Delete等记录集操作的调用 GetBookmarkPersistence 确定书签是否停留在于记录集中 GetCursorCommitBehavior 确定提交事务对一个打开的记录集的影响 GetCurs

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服