C++课件 第14章 数据库编程.ppt_第1页
C++课件 第14章 数据库编程.ppt_第2页
C++课件 第14章 数据库编程.ppt_第3页
C++课件 第14章 数据库编程.ppt_第4页
C++课件 第14章 数据库编程.ppt_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

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

文档简介

第14章数据库编程 C 高级编程 本章主要教学内容 简略介绍与数据库相关的基本理论 关键概念及数据库的基本操作 介绍ODBC DAO及MFC对数据库编程的支持及相关的MFC类 实际使用VisualC 作为开发工具进行一个数据库应用程序的编写 14 1 1数据库及数据库管理系统 14 1数据库编程概述 1 数据库 数据的集合 由一个或多个表组成 2 表 存储对一类对象的描述 3 记录和字段 表的一行是一个记录 记录描述一个具体对象的信息 表的一列是一个字段 字段描述表中所有对象的共同属性 14 1 1数据库及数据库管理系统 4 DBMS DatabaseManagementSystem是用来定义 管理和处理数据库与应用程序之间的联系的一套程序 14 关系型数据库管理系统 根据定义的关系来存储 处理和管理数据库信息的数据库管理系统 14 1 2有关数据库编程的几个关键概念 1 SQL StructuredQueryLanguage结构化查询语言SQL只对具有关系模型的各种对象进行操作 SQL DDL DCL DML 举例见P107 14 1 2有关数据库编程的几个关键概念 2 ODBC OpenDatabaseConnectivity开放式数据库连接 ODBC是WOSA中有关数据库的一个组成部分 ODBC是一种标准API 应用程序接口 用来在相关或不相关的数据库管理系统中存取数据 什么是ODBC 14 1 2有关数据库编程的几个关键概念 基于ODBC的应用程序对数据库的操作不依赖任何DBMS 不直接与DBMS打交道 所有的数据库操作由对应DBMS的ODBC驱动程序完成 ODBC让应用程序的开发者避免了与数据源相连的复杂性 ODBC的组成 P107图5 2 14 1 2有关数据库编程的几个关键概念 1 应用程序 2 ODBC管理器 该程序位于Windows控制面板的管理工具的ODBC内 其主要任务是管理安装的ODBC驱动程序和管理数据源 3 驱动程序管理器 驱动程序管理器包含在ODBC32 DLL中 对用户是透明的 其任务是管理ODBC驱动程序 是ODBC中最重要的部件 4 ODBCAPI 5 ODBC驱动程序 是一些DLL 提供了ODBC和数据库之间的接口 6 数据源 数据源包含了数据库位置和数据库类型等信息 实际上是一种数据连接的抽象 14 1 2有关数据库编程的几个关键概念 14 1 2有关数据库编程的几个关键概念 数据库建立好之后 要设定DSN 才能让ODBC知道数据库所在的位置以及数据库相关的属性 使用DSN的好处还有 如果移动数据库档案的位置 或是换成别种类型的数据库 只要重新设定DSN就可以了 不需要去修改原来使用的程序 什么是DSN DSN DataSourceName 即数据源名称 ODBC组成部件之间的关系 14 1 2有关数据库编程的几个关键概念 应用程序若需要访问一个数据库 必须首先用ODBC管理器注册一个数据源 驱动程序管理器负责将应用程序对ODBCAPI的调用传递给正确的ODBC驱动程序 ODBC驱动程序在执行完相应的操作后 将结果通过驱动程序管理器返回给应用程序 ODBCAPI必须通过驱动程序管理器与数据库交换信息 而不能直接访问数据库 应用程序在访问数据源时 需要ODBC驱动程序的支持 14 1 2有关数据库编程的几个关键概念 VC 可以安装的ODBC驱动程序 P108 14 1 2有关数据库编程的几个关键概念 3 RFX RecordFieldExchange记录字段数据交换 RFX是数据库编程中数据交换的内部基础 它更紧密地与记录集对象相联系 隐于后台 RFX在用户选择的记录集和隐藏于后台的数据源之间建立对应关系 是用户能通过操作此记录集来实现对数据源的操作 DDX DialogDataExchange 对话框数据交换它在对话框的可视控件和成员变量之间建立双向的对应关系 使用户能通过对话框上的控件浏览和修改变量的取值 DDX是数据库编程中数据交换在对话框界面上实现的基础 它更紧密地与视图对象相联系 显现于前台 14 1 2有关数据库编程的几个关键概念 14 1 3MFC的ODBC类简介 MFC的ODBC类 CDatabase类 CRecordset类 CRecordView类 CFieldExchange类 CDBException类 1 CDatabase类 14 1 3MFC的ODBC类简介 CDatabase对象表示到数据源的连接 通过它可以连接 操作 和使用数据源 在应用程序中可以同时使用一个或多个CDatabase对象 为了使用CDatabase对象 必须包含头文件 include CDatabase类的数据成员和成员函数 P109 111 要建立与数据源的连接 首先应构造一个CDatabase对象 然后再调用CDatabase的Open 成员函数 Open 函数负责建立连接 其函数原型为 14 1 3MFC的ODBC类简介 virtualBOOLOpen LPCTSTRlpszDSN BOOLbExclusive FALSE BOOLbReadOnly FALSE LPCTSTRlpszConnect ODBC BOOLbUseCursorLib TRUE 1 lpszDSN指定了数据源名 在lpszConnect参数中也可包括数据源名 此时lpszDSN必需为NULL 若在函数中未提供数据源名且使lpszDSN为NULL 则会显示一个数据源对话框 用户可以在该对话框中选择一个数据源 14 1 3MFC的ODBC类简介 Open 函数的参数说明 2 bExclusive说明是否独占数据源 由于目前版本的类库还不支持独占方式 故该参数的值应该是FALSE 这说明数据源是被共享的 14 1 3MFC的ODBC类简介 14 1 3MFC的ODBC类简介 3 参数bReadOnly若为TRUE则对数据源的连接是只读的 参数lpszConnect指定了一个连接字符串 连接字符串中可以包括数据源名 用户帐号 ID 和口令等信息 字符串中的 ODBC 表示要连接到一个ODBC数据源上 4 参数bUseCursorLib若为TRUE 则会装载光标库 否则不装载 快照需要光标库 动态集不需要光标库 若连接成功 函数返回TRUE 若返回FALSE 则说明用户在数据源对话框中按了Cancel按钮 若函数内部出现错误 则框架会产生一个异常 下面是一个调用Open 函数的例子 14 1 3MFC的ODBC类简介 在文档类中嵌入一个CDatabase对象CDatabasem db 连接到一个名为 StudentRegistration 的数据源m db Open StudentRegistration 在连接数据源的同时指定了用户帐号和口令m db Open NULL FALSE FALSE ODBC DSN StudentRegistration UID ZYF PWD 1234 14 1 3MFC的ODBC类简介 要从一个数据源中脱离 可调用函数Close 在脱离后 可以再次调用Open 函数来建立一个新的连接 调用IsOpen 函数可判断当前是否有一个连接 调用GetConnect 可返回当前的连接字符串 需要注意的是CDatabase的析构函数会自动调用Close 函数 所以只要删除了CDatabase对象就可以与数据源脱离 14 1 3MFC的ODBC类简介 14 1 3MFC的ODBC类简介 2 CRecordset类 CRecordset对象代表某个数据源中的一个记录集 即选定记录的集合 该类是MFC的ODBC类中最重要 功能最强大的类 为了使用CDatabase对象 必须包含头文件 include CRecordset类的数据成员和成员函数 P111 112 记录集主要分为快照 Snapshot 和动态集 Dynaset 两种 CRecordset类对这两者都支持 这两种记录集的不同表现在 它们对别的应用程序改变数据源记录时 采取了不同的处理方法 14 1 3MFC的ODBC类简介 快照型记录集提供了对数据的静态视图 快照是个很形象的术语 就好象对数据源的某些记录照了一张照片一样 当别的用户改变了记录时 包括修改 添加和删除 快照中的记录不受影响 也就是说 快照不反映别的用户对数据源记录的改变 直到调用了CRecordset Requery重新查询后 快照才会反映变化 对于象产生报告或执行计算这样的不希望中途变动的工作 快照是很有用的 需要指出的是 快照的这种静态特性是相对于别的用户而言的 它会正确反映由本身用户对记录的修改和删除 但对于新添加的记录直到调用Requery后才能反映到快照中 动态集提供了数据的动态视图 当别的用户修改或删除了记录集中的记录时 会在动态集中反映出来 当滚动到修改过的记录时对其所作的修改会立即反映到动态集中 当记录被删除时 MFC代码会跳过记录集中的删除部分 对于其它用户添加的记录 直到调用Requery时 才会在动态集中反映出来 本身应用程序对记录的修改 添加和删除会反映在动态集中 当数据必须是动态的时侯 使用动态集是最适合的 例如 在一个火车票联网售票系统中 显然应该用动态集随时反映出共享数据的变化 14 1 3MFC的ODBC类简介 3 CRecordView类 CRecordView 记录视图 是CFormView的派生类 它提供了一个表单视图来显示当前记录 用户可以通过表单视图显示 修改 添加和删除数据 用户一般需要创建一个CRecordView的派生类并在其对应的对话框模板中加入控件 记录视图使用DDX数据交换机制在表单中的控件和记录集之间交换数据 在前面介绍的DDX都是在控件和控件父窗口的数据成员之间交换数据 而记录视图则是在控件和一个外部对象 CRecordset的派生类对象 之间交换数据 交换数据的代码是ClassWizard自动加入的 关于CRecordView类的进一步说明见附件1 14 1 3MFC的ODBC类简介 14 1 3MFC的ODBC类简介 4 CFieldExchange类 CFieldExchange类没有基类 CFieldExchange类用于支持RFX 记录字段交换 和BulkRFX 批量记录字段交换 常被CDatabase类使用 14 1 3MFC的ODBC类简介 14 CDBException类 CDBException对象表示数据库类引起的异常条件 CDBException对象由Cdatabase类的成员函数构造和产生 CDBException类包括两个共有数据成员 m nRetCode 用来确定异常原因m strError 用来描述异常的相关信息 14 1 3MFC的ODBC类简介 什么是异常 单词 exception 是短语 exceptionalevent 异常事件 的缩写 它定义如下 定义 异常是程序在执行时发生的事件 它会打断指令的正常流程 例如数据源或网络I O错误时 就会产生异常 但执行程序的正常过程中预计会看到的错误不认为是异常 关于抛出异常见附带文件2 概括地讲 CDatabase针对某个数据库 它负责连接数据源 CRecordset针对数据源中的记录集 它负责对记录的操作 CRecordView负责界面 而CFieldExchange负责CRecordset与数据源的数据交换 14 1 3MFC的ODBC类简介 14 1 4数据库的基本操作 1 打开数据库2 关闭数据库3 删除记录4 修改记录14 添加记录6 SQL语句的直接执行 14 2ODBC 14 2 1ODBC概述 ODBC的作用 1 ODBC针对不同类型的数据库使用不同的API 这使得使用ODBC的应用程序可以避免应用程序随数据库的改变而改变 2 采用ODBC可以大大缩短开发应用程序的时间 原因在于更改数据库后无需改动代码而只需要调整相应的驱动程序 3 ODBC相当于一个中间层 它隔离了数据库的实现细节 方便了程序的开发 解放了软件开发者 而不用再掉入具体数据库的实现细节里了 4 ODBC通过使用驱动程序来提供数据库的独立性14 ODBC最大的优点是能以统一的方式处理所有的数据库 14 2 1ODBC概述 14 2 2ODBC的实现 基于ODBC的应用程序的开发步骤 配置ODBC环境对数据库进行操作释放ODBC环境 14 2 2ODBC的实现 1 配置ODBC环境 用户DSN 当前用户可以使用 系统DSN 所有的用户都可以使用 文件DSN 文件文件形式 比如ADO不能访问以上两种DSN的 但是它可以访问文件 DSN DSN的几种类型 14 2 2ODBC的实现 2 对数据库进行操作 初始化ODBC 得到一个唯一的代表ODBC线程使用的环境句柄henv 从ODBC中得到数据库连结句柄hdbc 连接数据库并利用ODBCAPI对其进行操作 14 2 2ODBC的实现 3 释放ODBC环境 完成对所连接的数据源的使用后 通过函数SQLDisconnect 和数据源断开连接并释放所有分配的句柄 如 SQLDisconnect hdbc bIsConnected false 14 3DAO 14 3 1DAO概述 DAO DataAccessObject数据访问对象 DAO提供了一组API供编程使用 MFC也提供了一组DAO类 封装了底层的DAOAPI 简化

温馨提示

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

评论

0/150

提交评论