第五讲 数据库编程 5.1 数据库编程的概述 5.1.1 数据库及数据库管理系统 5.1.2...

25
第第第 第第第第第 5.1 第第第第第第第第 5.1.1 第第第第第第第第第第5.1.2 第第第第第第第第第第第第第第第第第第第第第 5.1.3 MFC 第 ODBC 第第第 5.1.4 第第第第第第第第 5.2 ODBC 5.2.1 ODBC 第第 5.2.2 ODBC 第第第 5.3 DAO 5.3.1 DAO 第第 5.3.2 DAO 第 ODBC 第第第 5.3.3 MFC 第第 DAO 第 5.4 VC 第第第第第第第第第第第第第

description

第五讲 数据库编程 5.1 数据库编程的概述 5.1.1 数据库及数据库管理系统 5.1.2 工程软件开发中有关数据库编程的几个关键概念 5.1.3 MFC 的 ODBC 类简介 5.1.4 数据库的基本操作 5.2 ODBC 5.2.1 ODBC 概述 5.2.2 ODBC 的实现 5.3 DAO 5.3.1 DAO 概述 5.3.2 DAO 和 ODBC 的异同 5.3.3 MFC 中的 DAO 类 5.4 VC 软件平台中的数据库编程实例. 5.1 数据库编程的概述 介绍 ODBC, DAO, MFC 对数据库编程的支持及相应的 - PowerPoint PPT Presentation

Transcript of 第五讲 数据库编程 5.1 数据库编程的概述 5.1.1 数据库及数据库管理系统 5.1.2...

Page 1: 第五讲 数据库编程 5.1 数据库编程的概述 5.1.1 数据库及数据库管理系统 5.1.2 工程软件开发中有关数据库编程的几个关键概念 5.1.3 MFC 的 ODBC

第五讲 数据库编程

5.1 数据库编程的概述5.1.1 数据库及数据库管理系统5.1.2 工程软件开发中有关数据库编程的几个关键概念5.1.3 MFC 的 ODBC 类简介5.1.4 数据库的基本操作5.2 ODBC5.2.1 ODBC 概述5.2.2 ODBC 的实现5.3 DAO5.3.1 DAO 概述5.3.2 DAO 和 ODBC 的异同5.3.3 MFC 中的 DAO 类5.4 VC 软件平台中的数据库编程实例

Page 2: 第五讲 数据库编程 5.1 数据库编程的概述 5.1.1 数据库及数据库管理系统 5.1.2 工程软件开发中有关数据库编程的几个关键概念 5.1.3 MFC 的 ODBC

5.1 数据库编程的概述

介绍 ODBC, DAO, MFC 对数据库编程的支持及相应的MFC 类的使用等情况 .5.1.1 数据库及数据库管理系统1. 数据库 : 数据的集合 , 由一个或多个表组成 . 每个表中存储了对一类对象的数据描述 . 表的每一列描述了对象的一个属性 , 而每一行则是对一个对象的具体描述 . 一行称为一个绿录 , 一列称为一个字段 . 如果一个库中只有一个表 , 称该库为简单数据库 , 若由多个相关的表组成 , 则称为关系数据库 .2. DBMS: 数据库管理系统 , 是一用来定义 , 管理和处理数据库与应用程序之间的联系 , 例如 :FoxPro, Access,Sybase 等都是 DBMS.

Page 3: 第五讲 数据库编程 5.1 数据库编程的概述 5.1.1 数据库及数据库管理系统 5.1.2 工程软件开发中有关数据库编程的几个关键概念 5.1.3 MFC 的 ODBC

3. SQL: 结构化的查询语言 (structured query language),最早由 IBM 提出 , 是一种标准的数据库语言 , 大多数DBMS 都支持它 .4. RDBMS: 关系数据库管理系统 , 根据定义 的关系来存储 , 处理和管理数据库信息 , 主要有 SQL server,Oracle,Sybase,Foxbase,Foxpro,Access 等 .

5.1.2 工程软件开发中有关数据库编程的几个关键概念1. SQL: 对具有关系模型的各种对象进行操作 , 包括语句 , 数据库 , 表 , 列和行 . 有 DDL,DCL,DML 三种基本的语句形式 .DDL: 数据定义语句 , 用于建立数据结构和生成对象 ;DCL: 数据控制语句 , 用于设置和处理数据库对象的用户优先权DML: 数据的处理 , 有增加 , 修改 , 删除和执行数据的查询 .

Page 4: 第五讲 数据库编程 5.1 数据库编程的概述 5.1.1 数据库及数据库管理系统 5.1.2 工程软件开发中有关数据库编程的几个关键概念 5.1.3 MFC 的 ODBC

例 :CREATE 命令为 DDL 语句 ; GRANT 命令为 DCL 语句 ; SELECT 命令为 DML 语句 .

2 开放式数据库连接 (ODBC):open database connectivity,是一种用来在相关或不相关的数据库管理系统中存取数据的标准应用程序接口 (API). 是微软开放服务结构中的一部分 , 提供了一组对数据库访问的标准 API, 其利用SQL 来完成大部分任务 .优点 : 使用 ODBC 让应用程序的编写者避免了与数据源 相连的复杂性 . 由相应 DBMS 的 ODBC 驱动器完成 .如 :SQL server,Oracle,Sybase,Foxbase,Foxpro,Access,Paradox,excel 等 .

Page 5: 第五讲 数据库编程 5.1 数据库编程的概述 5.1.1 数据库及数据库管理系统 5.1.2 工程软件开发中有关数据库编程的几个关键概念 5.1.3 MFC 的 ODBC

ODBC 的组成 :ODBC 管理器 : 管理安装的 ODBC 驱动程序和数据源 .应用程序 .驱动程序管理器 : 管理 ODBC 驱动程序 .ODBC API: 接口 .ODBC 驱动程序 : 提供 ODBC 和数据库之间的接口 .数据源 .

应用程序

ODBC, API

驱动程序管理器

数据库注册

启动打开

返回信息返回结果

VC++ 支持哪些驱动程序 ?

Page 6: 第五讲 数据库编程 5.1 数据库编程的概述 5.1.1 数据库及数据库管理系统 5.1.2 工程软件开发中有关数据库编程的几个关键概念 5.1.3 MFC 的 ODBC

3. RFX:Record field exchange, 记录字段数据交换 . 它在用

户选择的记录集和后台数据源之间建立对应关系 , 用户操作记录集来实现对数据源的操作 .MFC 提供了一系列的 RFX 调用函数 , 可以实现记录集与数据源之间的双

向的数据交换 . RFX 与记录集对象相联系 , 隐于后台 ;DDX 在对话

框界面上实现的 , 与视图对象相联系 , 显示于前台 .

5.1.3 MFC 的 ODBC 类简介1. Cdatabase 别类 : 通过它可以连接 , 操作和作用数据

源 . 在应用程序中可以同时使用一个或多个 Cdatabase 对象 .

注 : 在使用 DAO 类时可使用类 :Cdaodatabase.

Page 7: 第五讲 数据库编程 5.1 数据库编程的概述 5.1.1 数据库及数据库管理系统 5.1.2 工程软件开发中有关数据库编程的几个关键概念 5.1.3 MFC 的 ODBC

使用过程 :A) 先构造一个 Cdatabase 对象并调用它的 OPENEX 成员 函数 .B) 再构造 Crecordset 对象操纵连接的数据源时 , 向Cdatabase 对象传递记录集构造程序指针 .C) 完成使用时调用 CLOSE 成员函数并销毁 Cdatabase对象 , 关闭以前没有关闭的任何记录集 .D) 使用前要包含头文件 :#include<afxdb.h>

数据成员和成员函数如下 :(1) 数据成员 : m_hdbc 类型为 HDBC, 是对数据源的ODBC 的连接句柄 .(2) 构造函数 : Cdatabase() 构造对象 , 须通过 OPENEX 或OPEN 初始化这个对象 .

Page 8: 第五讲 数据库编程 5.1 数据库编程的概述 5.1.1 数据库及数据库管理系统 5.1.2 工程软件开发中有关数据库编程的几个关键概念 5.1.3 MFC 的 ODBC

(3) 其它成员函数 :Open: virtual BOOL Open(LPCSTR lpszDSN, BOOL bExclusive=FALSE,BOOL bReadOnly=FALSE, LPCSTR lpszConnect=“ODBC;”, BOOL buseCursorLib=TRUE);OpenEx: 建立到数据源的一个连接 , 打开一个新构造的Cdatabase 对象 , 并将它初始化 .Virtual BOOL OpenEx(LPCSTR lpszConnectString,DWORD dwOption=0)Close: 关闭与某个数据源的连接 .virtual void Close();GetConnect: 返回连接字符串 .IsOpen: 用于检测 Cdatabase 与某个数据源相连 .Rollback: 回滚当前事务期间所做变化 , 数据源返回到BeginTrans 调用时定义的以前状况 .

Page 9: 第五讲 数据库编程 5.1 数据库编程的概述 5.1.1 数据库及数据库管理系统 5.1.2 工程软件开发中有关数据库编程的几个关键概念 5.1.3 MFC 的 ODBC

ExecuteSQL: 直接执行一条 SQL 语句 .GetDatabaseName: 返回当前使用的数据库名称 .CanUpdate: 用于检测数据库是否可更新 .Cancel: 取消正在进行的异步操作 , 或取消第二个线程 .CanTransact: 用于检测数据库是否允许事务处理操作 .SetLoginTimeout: 设置数据源连接的超时秒数 .SetQueryTimeout: 设置数据库查询操作超时秒数 .其它见课本 .

Page 10: 第五讲 数据库编程 5.1 数据库编程的概述 5.1.1 数据库及数据库管理系统 5.1.2 工程软件开发中有关数据库编程的几个关键概念 5.1.3 MFC 的 ODBC

第五讲 数据库编程

5.1 数据库编程的概述5.1.1 数据库及数据库管理系统5.1.2 工程软件开发中有关数据库编程的几个关键概念5.1.3 MFC 的 ODBC 类简介5.1.4 数据库的基本操作5.2 ODBC5.2.1 ODBC 概述5.2.2 ODBC 的实现5.3 DAO5.3.1 DAO 概述5.3.2 DAO 和 ODBC 的异同5.3.3 MFC 中的 DAO 类5.4 VC 软件平台中的数据库编程实例

Page 11: 第五讲 数据库编程 5.1 数据库编程的概述 5.1.1 数据库及数据库管理系统 5.1.2 工程软件开发中有关数据库编程的几个关键概念 5.1.3 MFC 的 ODBC

2. Crecordset 类 : 代表某个数据源中选定记录的集合 , 用于操作数据库中的记录 , 要使用该类应包含文件 afxdb.h数据成员有 :

m_nFields 当前记录集合中字段的数目 m_nparams 当前记录集合中参数的数目 m_database 指向一个 Cdatabase 对象的指针 m_strFilter 某个 SQL 语句的 WHERE参数 m_strSort 某个 SQL 语句的 ORDER BY参

数成员函数主要有 :AddNew: 将一个新记录加到当前表中 .CanAppend: 检测某个记录集是否可增加新记录 .Cancel: 取消操作 .

Page 12: 第五讲 数据库编程 5.1 数据库编程的概述 5.1.1 数据库及数据库管理系统 5.1.2 工程软件开发中有关数据库编程的几个关键概念 5.1.3 MFC 的 ODBC

Canupdate: 检测记录集是否能更新 .BOOL Canupdate()Close:void Close()Delete:virtual void Delete();throw (CDBException)DoFieldExchange: 在字段和记录集合之间交换数据 .Edit: 编辑当前记录IsBOF: 检测指针是否位于第一个记录的前面 .IsEOF: 检测指针是否位于最后一个记录之后 .IsFieldNull: 检测字段是否是 NULL.IsOpen: 检测当前记录集合是否已经打开 .Move:移动记录指针MoveFirst: 将第一个记录作为当前记录 .MoveNext: 将最后一个记录作为当前记录 .MovePrev: 将上一个记录作为当前记录 .Open: 打开指定的记录集合Update: 在调用 ADDNEW 或 EDIT 之后 , 以便更新数据 .

Page 13: 第五讲 数据库编程 5.1 数据库编程的概述 5.1.1 数据库及数据库管理系统 5.1.2 工程软件开发中有关数据库编程的几个关键概念 5.1.3 MFC 的 ODBC

3. CRecordView 类 : 代表一个视图 , 用来显示控件中数据库记录 . 有几个成员函数 ,isonfirstrecord,isonlastrecord,Ongetrecordset, onmove 等 .4.CFieldExchange 类 : 用于支持记录字段交换 (RFX) 和批量记录字段交换 (BULKRFX).5. CDBException 类 : 对象表示数据库类引起的异常条件 .包括两个公用数据成员 m_nRetCode 和 m_strError.

5.1.4 数据库的基本操作 : 利用 Cdatabase,Crecordset 类的成员函数来完成 . 设 m_pset 为指向一个 CDBset 对象的指针 .(1) 打开数据库 .(详见 P114)(2) 关闭数据库 .Cdatabase * pDb; pDb->Close();(3) 删除记录 .m_pset->Delete(); if(!m_pset->IsEOF())m_pset->MoveNext();else m_pset->MoveLast();

Page 14: 第五讲 数据库编程 5.1 数据库编程的概述 5.1.1 数据库及数据库管理系统 5.1.2 工程软件开发中有关数据库编程的几个关键概念 5.1.3 MFC 的 ODBC

4 修改记录 . m_pset->Edit(); m_pset->m_type=“mytype”;……..; m_pset->Update(); m_pset->Requery();5. 添加记录 .m_pset->AddNew();m_pset->SetFieldNull(&(m_pset->m_type),FALSE);m_pset->m_type=“mytype”;……..m_pset->Update();m_pset->Requery();6.SQL 语句的直接执行 .( 程序段见 P115)

Page 15: 第五讲 数据库编程 5.1 数据库编程的概述 5.1.1 数据库及数据库管理系统 5.1.2 工程软件开发中有关数据库编程的几个关键概念 5.1.3 MFC 的 ODBC

5.2 ODBC5.2.1 ODBC 概述1. 优点 : (见 P115-116)2. ODBC 通过使用驱动程序来提供数据库的独立性 . 驱动程序一般为 DLL, 通过调用动态链接上的驱动程序所支持的函数来操作数据库 .

5.2.2 ODBC 的实现一般过程为 :配置 ODBC环境 , 对数据库进行操作 ,释放ODBC环境 .1. 配置 ODBC环境 : 有三种类型的数据源 :(1) 用户数据源 : 本地用户自创建的 , 只供创建者使用 .(2) 系统数据源 : 属于系统的数据源 , 只有访问权限的用户方可使用 .

Page 16: 第五讲 数据库编程 5.1 数据库编程的概述 5.1.1 数据库及数据库管理系统 5.1.2 工程软件开发中有关数据库编程的几个关键概念 5.1.3 MFC 的 ODBC

(3) 文件数据源 : 将数据源指定到文件 , 任何已正确安装驱动程序的用户都可以使用这种数据源 .

2. 对数据库进行操作 :首先初始化 ODBC 并得到一个惟一代表 ODBC线程使用环境句柄 henv, 然后应用程序从 ODBC 中得到数据连接句柄 hdbc, 最后应用程序就可以利用 ODBC API 对所连数据库进行适当的操作 .

3. 释放 ODBC环境 .::SQLDisconnect(hdbc);bIsConnected=FALSE;

Page 17: 第五讲 数据库编程 5.1 数据库编程的概述 5.1.1 数据库及数据库管理系统 5.1.2 工程软件开发中有关数据库编程的几个关键概念 5.1.3 MFC 的 ODBC

4 .VC++ 中的 ODBC 编程

VC++ 的 MFC 基类库中定义了几个数据库类 , 主要有Cdatabase 类 : 提供了对数据源的连接 . Crecordset 类 : 提供了从数据源中提取出的记录集 . 有两 种 : 动态集和快照集 . 动态与其它所作的修 改保持同步 . CrecordView 类 : 提供记录集的视图形式 .

具体操作见示例 .(配置 WIZAD 向导 .)

Page 18: 第五讲 数据库编程 5.1 数据库编程的概述 5.1.1 数据库及数据库管理系统 5.1.2 工程软件开发中有关数据库编程的几个关键概念 5.1.3 MFC 的 ODBC

5.3 DAO5.3.1 DAO 概述DAO:data access object , 即数据访问对象 .DAO 提供了一个框架 , 用它编写代码可以创建和操作数据库 , 使用 Jet 数据引擎来访问数据库 , 主要是为 access 和 VB 提供引擎 .同 ODBC 一样 ,DAO也提供一组 API 函数供调用 .MFC也提供了一组 DAO 类供使用 .5.3.2 DAO 和 ODBC 的异同1. 相同 : 提供了相似功能的 MFC 类 ;

DAO ODBC

CDaoDatabase Cdatabase

CDaorecordset Crecordset

CDaorecordview Crecordview

CDaoException CException

Page 19: 第五讲 数据库编程 5.1 数据库编程的概述 5.1.1 数据库及数据库管理系统 5.1.2 工程软件开发中有关数据库编程的几个关键概念 5.1.3 MFC 的 ODBC

都支持对各种 ODBC 数据源的访问 ;AppWizard 和 ClassWizard 对使用 DAO 和 ODBC 应用 程序提供了类似的支持 .

2. 不同 .* 在用 ClassWizard 创建 Cdaorecordset 类的派生类时 , 在数据库选择对话框中选择 DAO, 不是 ODBC.* 记录集的默认类型不同 .ODBC默认是快照 , 而 DAO 默认的是动态集 .*参数化的方式不同 :DAO 记录集的 m_strFilter, m_strsort 中的参数不是“ ?”, 而是一个有意义参数 .* 处理异常方式不同 .* 数据交换方式不同 : DAO 使用 DFX, 而不是 RFX;

Page 20: 第五讲 数据库编程 5.1 数据库编程的概述 5.1.1 数据库及数据库管理系统 5.1.2 工程软件开发中有关数据库编程的几个关键概念 5.1.3 MFC 的 ODBC

*DAO虽可访问 ODBC 数据源 ,但它可直接访问一些 基于 Jet引擎的数据库 , 如 access, foxpro, paradox, excel, lotusWK.*DAO直接支持 DDL 的 SQL 语言 , 而 ODBC 不支持 , 其只有调用其 API 来完成类似的功能 .*DAO 提供了一些新类 : CDaotableDef 类提供了表结构定义 : 成员函数有 Open, Creat ,Creatfield ,CreatIndex, Append. CDaoQueryDef 定义一个查询定义并能存入库中 . CDaoWorkspace 提供了数据工作区 .

*DAO 提供了对 access 库的强大的支持 .

Page 21: 第五讲 数据库编程 5.1 数据库编程的概述 5.1.1 数据库及数据库管理系统 5.1.2 工程软件开发中有关数据库编程的几个关键概念 5.1.3 MFC 的 ODBC

5.3.3 MFC 中的 DAO 类1. CDaoDatabase 类 : 主要成员函数及操作详见 P120-121 表 5-22. CDaoRecordset 类 . 对象有三种类型 :(1)表型记录集 : 表示一个基本表 .(2)动态集型记录 : 是一个查询的结果 , 包含可更新记录 .(3)快照型记录集 : 是一组记录的一个静态拷贝 , 可查但 不可更新 .* 部分数据成员如下 :m_pDAORecordset, m_nFields, m_nParams, m_pDatabasem_strFilter, m_strSort.( 作用详见 P122)* 构造函数有 :CDaoRecordset: 构造一个 CDaoRecordset 对象 .Close: 关闭记录集 .Open:从一个表 , 动态集或快照创建一个新的记录集 .

Page 22: 第五讲 数据库编程 5.1 数据库编程的概述 5.1.1 数据库及数据库管理系统 5.1.2 工程软件开发中有关数据库编程的几个关键概念 5.1.3 MFC 的 ODBC

* 属性 (21条 ,详见 P123)* 记录集的更新操作 : AddNew: 增加一条新记录 , 以 Update 完成操作 . Delete: Edit: 以 Update 完成操作 . Update.* 记录集的导航操作 :find , findfirst , findlast , findnext ,Findprev, getabsoluteposition, move, movefirst, movelastMovenext, moveprev, seek.* 可覆盖的函数 :DoFieldExchange: 实现 DAO 记录字段双向交换 .GetDefaultDBName: 返回数据源名字 .GetDefaultSQL: 返回要执行的默认 SQL 字符串 .

Page 23: 第五讲 数据库编程 5.1 数据库编程的概述 5.1.1 数据库及数据库管理系统 5.1.2 工程软件开发中有关数据库编程的几个关键概念 5.1.3 MFC 的 ODBC

4. CDaoQueryDef 类 : 表示一个查询定义 ,封装了QueryDef 对象 , 并把查询定义保存在库中以便于查询速度提高 . 查询定义包括 : 选择 , 动作查询 , 交叉表 , 删除 ,更新 ,添加 , 造表 , 数据定义 ,SQL直接查询和批量查询等 .(execute 一般用于 BULK 操作 .)* 成员有 :m_pDatabase, m_pDaoQueryDef.* 构造函数 :CdaoQueryDef, Create, Append , Open, Close.* 成员函数 :(详见 P125-126)

5. CDaoWorkspace 类 : 可让一个用户管理从登录到离开期间 , 指定的密码保护数据库会话的全过程 .( 作用见 P126)

Page 24: 第五讲 数据库编程 5.1 数据库编程的概述 5.1.1 数据库及数据库管理系统 5.1.2 工程软件开发中有关数据库编程的几个关键概念 5.1.3 MFC 的 ODBC

6. CDaoException 类 : 基于 DAO 的数据库类产生的异常 .(1) 数据成员 : m_scode 与错误相关的 SCODE值 . m_nAfxDaoError 包含了 MFC 中 DAO 类的任何错误 的扩展代码 . m_pErrorInfro 指向一个对象的指针 , 该对象记录了 一个 DAO错误对象信息 .(2) 操作 : GetErrorCount 返回数据库引擎的 Errors 集合中的 错误代码 . GetErrorInfro 返回 Errors 集合中某个错误的错误代码 .

Page 25: 第五讲 数据库编程 5.1 数据库编程的概述 5.1.1 数据库及数据库管理系统 5.1.2 工程软件开发中有关数据库编程的几个关键概念 5.1.3 MFC 的 ODBC

5.4 VC 软件平台中的数据库编程实例 (见 P127-142)