




已阅读5页,还剩82页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 实践出真知 本章通过一个具体的实例来说明数据库应用系统的设计和实现过程 以使读者对数据库及其应用开发有一个真切的理解 第十章数据库应用系统的设计与实现 2 10 1应用背景与需求说明首先来看看现在的目标 在单机上实现一个教学管理系统的例子 并且可以很容易地把它移植到C S结构中 用Windows98操作系统 VC6 0作为数据库的前端开发环境 为了简单起见 这里只涉及教学管理系统中的对学生 课程和教师的管理部分 此系统要求能够记录学生的修课情况 教师的授课情况以及课程情况 具体要求为 一门课程可由多名教师来讲授 一个教师可讲授多门课程 一个学生可以选修多门课程 3 需产生的报表有 每学期开学时要生成学生修课情况表 内容包括学号 姓名 课程名 修课类别 其中修课类别分为必修 选修 重修 学期结束时要生成学生修课成绩表 内容包括学号 姓名 课程名 修课类别 平时成绩 卷面成绩 总评成绩 生成教师授课表 内容包括教师号 教师名 课程名 授课类别 学时数 班数 授课类别分为主讲 辅导 带实验 4 10 2数据库设计 数据库系统的设计与程序的设计有类似之处 都是首先对需求进行研究和分析 不同的是 数据库着重于数据对象的属性和数据对象之间的关系的分析 一般采用E R模型方法来分析数据对象的属性和数据对象之间的关系 5 10 2 1概念设计此系统所包含的实体有 课程 元素为由一个主讲教师负责且教学内容相同的教学活动单位 用课程号来标识此实体 学生 元素为一个学生 由学号来标识 教师 元素为一个教师 由教师号来标识 其初步E R图如图所示 6 需要说明的是 由于实体的属性可能比较多 在画E R图时不一定要把所有实体的属性都画在E R图上 可以另外用文字说明 这样也使得所画的E R图简明清晰 便于分析 经过初步分析 得到课程管理系统中的各实体所包含的基本属性为 课程 课程号 课程名 讲授学期 学时数 学生 学号 姓名 系 专业 班 教师 教师号 教师名 系 教研室 7 一个较为完整的E R图如图所示 8 10 2 2设计关系模式有了基本E R图 就可以设计基本的关系模式了 设计基本关系模式主要就是从E R图出发 将其直接转换为关系模式 转换规则为 1 将每个实体都转换为一个关系模式 实体的属性就是关系的属性 实体的主键就是关系的主键 2 对于联系分情况来处理 主要有三种情况 若联系是一对一的 则联系不作为一个独立的关系 只需在将一个实体的主键放置在另一个实体所对应的关系中作为外键即可 若联系是一对多或多对一的 则联系不作为一个独立的关系 只需将一端实体的主键放置在多端实体对应的关系中作为外键即可 若联系是多对多的 则此联系作为一个独立的关系存在 且将各个实体的主键放置在此关系中作为外键 9 这个例子的E R图转换的关系模式为 课程 课程号 课程名 讲授学期 学时数 主键为课程号 学生 学号 姓名 系 专业 班 主键为学号 教师 教师号 教师名 系 教研室 主键为教师号 修课 学号 课程号 修课类别 平时成绩 卷面成绩 总评成绩 主键为 学号 课程号 学号 为引用学生表的外键 课程号 为引用课程表的外键 授课 课程号 教师号 授课类别 班数 主键为 课程号 教师号 教师号 为引用教师表的外键 课程号 为引用课程表的外键 10 最后确定表中各属性的详细信息 包括数据类型和长度等 课程表课程号 字符串型 10字节 主键课程名 字符串型 20字节 非空讲授学期 字符串型 2字节 非空学时数 整型 非空学生表学号 字符串型 10字节 主键姓名 字符串型 20字节 非空系 字符串型 20字节 非空专业 字符串型 20字节 非空班 字符串型 10字节 非空教师表教师号 字符串型 10字节 主键教师名 字符串型 20字节 非空系 字符串型 20字节教研室 字符串型 10字节 11 修课表学号 字符串型 10字节 主键 引用学生表的学号的外键课程号 字符串型 10字节 主键 引用课程表的课程号的外键修课类别 字符串型 4字节 非空平时成绩 浮点型 大于等于0 小于等于100卷面成绩 浮点型 大于等于0 小于等于100总评成绩 浮点型 大于等于0 小于等于100授课表课程号 字符串型 10字节 主键 引用课程表的课程号的外键教师号 字符串型 10字节 主键 引用教师表的教师号的外键授课类别 字符串型 10字节班数 浮点型 大于0 假设选修课有半个班的情况 因此取浮点型 有了数据库的基本表之后 需要看一下这些基本表能否满足产生报表的需求 12 此教学管理系统要产生三张报表 学生修课情况表 学生修课成绩表和教师授课表 先看一下学生修课情况表 学生修课情况表包含的内容为 学生修课情况表 学号 姓名 课程名 修课类别 其中的 学号 姓名 可由学生表得到 课程名 和 修课类别 可由修课表得到 因此可以满足学生修课情况表内容的要求 这可以通过定义视图实现 也可以在生成报表时通过查询语句实现 同样 修课成绩表 的内容也可从学生表和修课表得到 教师授课表的内容可从课程表 教师表和授课表得到 由此 可知道所设计的数据库表能够满足报表的要求 13 10 2 3确定数据库应用的功能数据删除数据的删除要根据一定的条件进行 比如当某个学生退学时 则在 学生表 中做删除时的条件是删除学号等于退学学生的学号 要避免进行无条件删除 因为那样会把数据表中的所有记录都删掉了 数据修改当某些数据发生变化或某些数据录入不正确时 应该允许用户对数据库中的数据进行修改 修改数据的操作一般是先根据一定条件查询出要修改的记录 然后再对其中的某些记录进行修改 修改完后再写回到数据库中去 同删除一样 也不应该允许所有的人都具有修改数据的权力 14 据查询在数据库应用系统中 数据查询是最常用的功能 数据查询应根据用户提出的查询条件进行 在设计系统时应首先征求用户的查询需求 然后根据这些查询需求整理出系统应具有的查询功能 一般允许所有使用数据库的人都具有数据查询权力 生成报表生成报表是数据库应用中不可缺少的一个功能 也是比较麻烦的工作 令人高兴的是 常见的许多数据库开发工具 如VB Delphi PowerBuilder等 都提供了报表生成工具 可以直接使用这些工具来生成符合用户要求的报表 15 本章的例子中需要生成三张报表 学生修课表 学生修课成绩表 教师授课表 这三张报表所包含的内容分别为 学生修课表 学号 姓名 课程名 修课类别 学生成绩表 学号 姓名 课程名 修课类别 平时成绩 卷面成绩 总评成绩 教师授课表 教师号 教师名 课程名 授课类别 学时数 班数 可以看到 这三张表的内容不能与某个关系模式完全对应 为此 可以采用定义视图的方法来解决 创建这些报表的视图的SQL语句为 CREATEVIEW学生修课表 学号 姓名 课程名 修课类别 ASSELECT学生 学号 学生 姓名 课程 课程名 修课 修课类别FROM学生JOIN修课ON学生 学号 修课 学号JOIN课程ON课程 课程号 修课 课程号对 学生成绩表 和 教师授课表 的处理与此类似 16 创建的方法有很多种 例如 许多商用数据库都提供了图形化界面和命令行的方式用于创建和管理数据库 一些第三方的可视化数据管理器也可以用于数据库的创建和管理 用户也可以通过编写程序来实现数据库的创建和管理 本章将以MicrosoftSQLServer为例讲述如何创建数据库和表 以用于教学管理系统之中 10 3数据库的创建 17 10 3 1创建数据库数据库的创建需要一定的权限 默认情况下只有系统管理员和数据库拥有者才可以创建数据库 其他用户也可以被授予建立数据库的权限 在创建数据库之前 用户需要确保拥有相应的权限 数据库创建后 该用户即为数据库的拥有者 在SQLServer中可以通过如下三种方式创建数据库 在企业管理器中直接创建 用户直接定制数据库名称 文件位置和文件属性等内容使用Transact SQL语言创建 编写创建数据库的代码 在查询分析器中执行 使用向导创建 根据系统提示逐项进行设置数据库的各个属性 18 下面将讲述如何使用后两种方法创建数据库 1 使用向导创建数据库 1 打开企业管理器 选中欲创建数据库的服务器节点 随后选择 工具 向导 选项 或直接点击工具栏中的按钮打开向导对话框 如图10 3所示 2 双击 创建数据库向导 或点击 确定 按钮 出现图10 4所示对话框 19 3 点击 下一步 按钮出现图所示对话框 在此对话框中可以指定将要创建的数据库的名字 以及数据库文件 数据库事务日志文件的存放位置 在这里使用的数据库名字为 JXGL 4 单击 下一步 出现如图所示对话框 在此对话框中可以修改数据库文件的名字以及该文件的初始大小 默认情况下数据库文件的名字为 数据库名 Data 初始大小为1MB 20 4 单击 下一步 按钮 出现如图所示对话框 其中可以指定数据库文件的增长方式 这里选择数据库文件每次增长的比例为10 并且文件的最大尺寸不受限制 直至磁盘空间耗尽为止 5 单击 下一步 按钮 出现图所示对话框 其中可以指定日至文件的名称以及该文件的初始大小 默认情况下日志文件的名字为 数据库名 Log 初始大小为1MB 21 6 单击 下一步 按钮 出现如图10 9所示对话框 其中可以指定日志文件的增长方式 这里选择日志文件每次增长的比例为10 并且文件的最大尺寸不受限制 直至磁盘空间耗尽为止 7 点击 下一步 按钮 出现如图10 10所示对话框 其中收集了前面步骤用户所指定的信息 确认无误后 点击 完成 按钮完成数据库的创建 22 2 使用Transact SQL语言创建数据库上面创建的数据库已可以通过如下的Transact SQL语言来编写 代码如下 createdatabaseJXGLon name JXGL Data filename D ProgramFiles MicrosoftSQLServer MSSQL Data JXGL Data MDF size 1 maxsize unlimited filegrowth 10 logon name JXGL Log filename D ProgramFiles MicrosoftSQLServer MSSQL Data JXGL Log LDF size 1mb maxsize unlimited filegrowth 10 23 在SQLServer的查询分析器中执行上述代码即可创建一个数据库 使用这种方式与采用向导创建的数据库属性是一致的 数据库的创建 管理及维护是一件十分复杂的工作 值得用一本专门的著作来讲解 在这里只是简单介绍一下相关的知识 感兴趣的读者可以阅读相关的书籍 24 10 3 2创建数据库表每个数据库都由关系图 表 视图 存储过程 用户 角色 规则等等数据库对象构成 其中表是数据库中主要的对象 其中存储各种各样的信息 本级将讲述如何通过企业管理器创建数据库表 创建数据表 1 设计表打开企业管理器 在左侧导航栏中选中前面刚刚建立的数据库 单击鼠标右键 在弹出的菜单中选择 新建 表 命令 如图10 11所示 25 26 过以上方式或直接点击工具栏中的按钮即可打开表设计器 在表设计器中可以输入列名 数据类型 长度及选择是否允许空 字段的属性可以在下面的列选项卡中设置 各个属性的含义如下 名称 输入列的名称 列名需要符合标识符的命名规则 表内唯一 类型 从中选一个适合于列的类型 大小 对于字符型的数据类型 在这里指定字符的长度 对于固定长度的数据类型 比如Long类型 用户不能改变其大小 系统在这里自动显示Long类型的长度 允许未空 指定此列是否允许NULL值 描述 类的描述信息 默认值 当输入数据时 如果用户没有指定列的值 则该列设为默认值 27 精度 对于数值型列 指定其精度 小数位数 对于浮点数 指定其小数位数 标识 指定列是否为标识列 如果为标识列 当向表中添加新行时 将为该列提供唯一 递增的值 一个表只能创建一个标识列 标识种子 指定标识列的初始值 标识列递增量 指定标识列的递增量 是RowGuid 指定该列是否使用全局唯一标识符 它可以保证任何数据表中都不会有完全一样的数据行 公式 指定计算列的列表达式 计算列是虚拟的 其值由其它列计算得到 排序规则 指定列的排序规则 28 在表设计器中依次输入 课程号 课程名 授课学期 学时数 四个列 并设计其属性 如图10 12所示 29 2 设置主键选中需要设置主键的列 单击鼠标右键 在弹出的菜单中选择 设置主键 命令或在工具栏中单击按钮即可设置主键 使用主键可以唯一确定一条记录 3 建立索引建立好表的结构后就可以建立此表的索引了 建立索引可以提高查询表中记录的速度 在表设计器中单击鼠标右键 在弹出的菜单中选择 索引 键 命令 或在工具栏中单击即可弹出管理索引 建的对话框 单击 新建 按钮可以开始创建一个新的索引 如图10 13所示 30 选定的索引 文本框中显示系统分配给新索引的名称 用户可以自行修改 在 列名 下可以选择索引所包含的列 对于每一列 还可以指定索引是按照升序还是降序组织索引键值 如果希望创建唯一索引 可以选择 创建UNIQUE 复选框 如果希望创建聚集索引 需要选中 创建为CLUSTERED 复选框 单击 关闭 按钮即完成索引的创建 4 保存设计当设计完成后 在工具栏中单击按钮 即弹出 选择名称 对话框 在文本框中输入表名 然后单击 确定 按钮即可保存设计 如图10 14所示 31 2 录入数据数据表结构建立好之后 就可以向表中输入数据了 录入数据有很多方法 如通过编写代码录入数据 从外部数据源中导入数据等多种方式 在企业管理器中也可以直接录入数据 在刚刚建立的表上单击鼠标右键 在弹出的菜单中选中 打开表 返回所有行 命令 表中存储的数据即可以表格的形式显示出来 在其中可以逐行逐列的录入数据 录入的数据必须满足表中定义的完整性约束 否则会出现错误 如图10 15所示 32 3 查询数据表数据表建立好之后 如果已经在数据表中录入了数据 就可以对表中的数据进行有条件或无条件的查询 无条件查询很简单 只要在表名上单击鼠标右键 然后从弹出的菜单中选择 打开表 返回所有行 命令即可 如果要进行条件查询 可以通过SQLServer的查询分析器来实现 假设要查询学时数大于54的所有课程情况 可以先编写SQL命令 SELECT FROM课程WHERE学时数 54在查询分析器中运行这个命令 得出的结果如图10 16所示 33 使用查询分析器查询表 34 10 4数据库开发环境在完成设计之后 就应当确定数据库系统的开发环境和运行环境 教学管理系统可在C S环境下实现 也可在单机上实现 1 4 1VC连接数据库的方法概述VisualC 中提供了多种数据库访问技术 常见的有ODBC MFCODBC DAO OLEDB ADO 每种方式有着各自的特点 编程接口也不相同 究竟选择哪种接口来编写程序 要视具体的应用程序对数据库的性能要求等条件而定 1 ODBCODBC OpenDataBaseConnectivity 是微软公司提出来的一个用于访问数据库的统一接口 基于ODBC的应用程序对数据的操作不和任何的数据库管理系统直接打交道 所有对数据库的操作是由数据库管理系统的ODBC驱动程序完成的 ODBC建立在C S体系结构之上 它分为四个层次 应用程序 驱动程序管理器 驱动程序 数据源 目前 ODBC已经成为一种标准 几乎所有的关系数据库都提供了ODBC驱动程序 这使ODBC的应用十分广泛 35 1 ODBCODBC OpenDataBaseConnectivity 是微软公司提出来的一个用于访问数据库的统一接口 基于ODBC的应用程序对数据的操作不和任何的数据库管理系统直接打交道 所有对数据库的操作是由数据库管理系统的ODBC驱动程序完成的 ODBC建立在C S体系结构之上 它分为四个层次 应用程序 驱动程序管理器 驱动程序 数据源 目前 ODBC已经成为一种标准 几乎所有的关系数据库都提供了ODBC驱动程序 这使ODBC的应用十分广泛 由于ODBC是一种底层的访问技术 直接使用ODBCAPI连接数据库较为繁琐 但是 应用程序使用ODBCAPI能够从底层管理和控制数据库 完成一些高层数据库访问技术不能完成的功能 36 2 MFCODBC直接使用ODBCAPI编写应用程序比较繁琐 在VisualC 中提供了MFCODBC类对复杂的ODBCAPI进行了封装 大大简化的数据库应用程序的开发 MFC的ODBC类主要包含以下几个 CDatabase类 用于建立与数据源的连接 CRecordset类 代表从数据源中获取的一个记录集 通过该类可以对记录集中的记录进行滚动 修改 插入和删除等操作 CRecordView类 该类提供了一个表单视图来显示当前记录 该类支持记录的浏览和更新 CFieldExchange类 支持记录及字段数据成员与相应数据库表的字段之间的数据交换 CDBException类 代表ODBC类的异常 37 DAODAO DataAccessObject 使用MicrosoftJet数据库引擎访问数据库 Jet引擎被包含在一组动态链接库 DLL 文件中 在运行时 这些文件被链接到应用程序 它把应用程序的请求翻译成数据库的物理操作 它真正读取 写入和修改数据库 并处理所有内部事务 如索引 锁定 安全性和引用完整性 它还包含一个查询处理器 接收并执行SQL查询 实现所需的数据操作 另外 它还包含一个结果处理器 用来处理查询所返回的结果 Access VB等具有基于MicrosoftJet数据库引擎的数据访问能力 在访问Access数据库时 使用DAO具有良好的性能 38 OLEDBOLEDB ObjectLinkandEmbeddingDataBase 是Microsoft提出的新一代数据访问技术 它是建立在ODBC基础上的一个开发规范 ODBC是为访问关系数据库而设计的 而OLEDB则可以访问关系型和非关系型数据源 OLEDB定义了一组COM接口 对各种数据库管理系统服务进行封装 OLEDB组件包括了数据提供者 数据消费者以及服务组件 数据提供者实现了一套OLEDB核心接口 数据消费者可以是需要访问数据的任何程序 服务组件用于处理和传输数据 如查询处理器和游标引擎等 39 ADOADO ActiveXDataObject 是建立在OLEDB之上的高层数据库访问技术 ADO控件能访问的数据 除了标准的关系数据库 如Access SQLServer等 中的数据之外 还包括邮件数据 Web上的文本或图形 目录服务 DirectoryServices 等 ADO是Microsoft公司长期的数据访问策略 它将逐步取代DAO和RDO而成为主要的数据访问接口 ADO访问数据是通过OLEDB实现的 它是OLEDB的数据消费者 所以 ADO必须通过OLEDB引擎 才能访问各种数据 在下一节将详细介绍ADO有关的内容 40 10 4 2ADO对象无论是使用ADO控件还是直接使用ADOAPI编写数据库应用程序 了解ADO对象都是十分重要的 ADO中主要的对象有如下几个 Connection对象 代表与数据库的连接 Recordset对象 代表来自一个数据库表或命令执行结果的集合 结果集 Command对象 代表将对数据源执行的指定命令 Field对象 代表ResultSet中的一列 Parameter对象 代表与Command相关联的参数化查询或存储过程的参数或自变量 Error对象 有关数据访问的错误信息 Property对象 ADO对象的动态特征 41 10 5使用ADO数据控件访问数据库在VisualC 中使用ActiveX数据库访问控件可以使用户几乎不用编写代码就可以快速地生成数据库应用程序 VisualC 中提供的CrystalReports可用于生成报表 有了这些工具 用户就可以创建各种应用程序 尤其对做原型开发更是有用 当然 随着应用程序复杂性的提高 用户还是需要自己编写一些程序 但即使对于较复杂的应用程序 这些工具也为编程提供了很好的基础 本节将通过一个具体实例 介绍在VisualC 中使用ADO数据访问控件对数据库进行操作的方法 42 建立VC工程在这个例子中 通过MFC建立ADO应用程序 MFC提供了应用程序框架 创建一个图形界面应用程序十分简单 建立工程 1 依次点击 File New 命令 打开新建对话框 单击 Projects 选项卡 选择 MFCAppWizard exe 输入工程名techInfo 如图10 17所示 单击 OK 按钮进入工程创建向导 43 44 2 在 MFCAppWizard Step1 对话框中 单击 Dialogbased 单选框 创建一个基于对话框的工程 如图10 18所示 45 3 在上面的对话框中直接点击 Finish 按钮 跳过向导的其它部分 使用默认值直接创建工程 4 在IDD TECHINFO DIALOG对话框中 将对话框初始提供的静态文本 OK按钮和Concel按钮删除 下面就可以开始数据库应用程序的开发了 46 10 5 2使用ADO数据控件MicrosoftADODataControl Adodc 控件属于ActiveX控件 使用这个控件可以十分方便的实现与数据库的连接 在使用这个控件之前 应首先将其加入到工程中 1 将Adodc控件加入到工程中在VisualC 中使用该控件的步骤如下 1 IDD TECHINFO DIALOG对话框中 单击鼠标右键 在弹出的菜单中选择 insertActiveXControl 命令 弹出 insertActiveXControl 对话框 如图10 19所示 47 2 在对话框中选中 MicrosoftADODataControl6 0 OLEDB 单击 OK 按钮 这样控件即出现在对话框中 调节该控件的大小及位置 结果如图10 20所示 48 2 设置ADO控件的属性和方法将ADO控件添加到窗体之后 就可以使用该控件来开发数据库应用程序 ADO控件的最主要的属性是Connectionstring和RecordSource属性 Connectionstring属性指出了ADO控件和数据库连接的连接字符串 通过这个连接字符串可以使ADO控件和OLEDBProvider支持的数据库连接 RecordSource属性指出了可以操作的数据的来源 即结果记录集 这个记录集可以是一张表 也可以是一个存储过程或SQL命令生成的结果集等 另外 设置ADO控件的Mode属性可以控制对记录集的操作权限 如写 读 共享等 通过使用Recordset对象的各种属性 方法和事件 就可以十分方便的操作数据库中的数据了 49 ADO控件主要的属性设置方法如下 Caption属性在Adodc控件上单击鼠标右键 在弹出的菜单中选中 Properties 命令 出现ADO属性对话框 在其中选择 General 标签 将其中ID的值更名为IDC ADODC Caption的值设置为 ADO控件 点击滚动结果集 如图10 21所示 50 2 Connectionstring属性使用ADO控件访问数据 首先必须要连接数据源 Connectionstring属性用来建立与数据源的连接信息 Connectionstring属性的设置步骤为 1 在ADO属性对话框中选择 Control 标签 出现如图10 22所示的对话框 51 3 单击 Build 按钮 显示如图10 22所示的 数据链接属性 对话框 在 提供程序 标签中 选择要连接的数据库的种类 这里选择 MicrosoftOLEDBProviderforSQLServer 52 4 在图10 22上选择完数据提供者之后 单击 下一步 按钮 打开 连接属性 选项卡 弹出数据库链接属性对话框 在该对话框上 在 选择或输入数据库名称 框中输入数据库的路径和数据库文件名 也可以通过右边的 按钮来选择 在 输入登录服务器的信息 框中输入数据库的登录用户名及密码 在 在服务器上选择数据库 选择将要连接的数据库 这里选择了10 3 1节创建的数据库 JXGL 如图10 23所示 53 5 单击 测试连接 按钮可以测试与数据库的连接是否成功 如果连接成功 则弹出一个对话框显示测试连接成功 6 单击 确定 按钮退出属性页对话框 完成Connectionstring属性的设置 可以看到 这个例子中生成的连接字符串为 Provider SQLOLEDB 1 Password jxgl PersistSecurityInfo True UserID sa InitialCatalog JXGL DataSource ONTOLOGY 3 CommandType属性与RecordSource属性CommandType属性用于指定RecordSource属性的取值类型 可以直接在 RecordSource 标签页中的CommandType属性框右边的下拉列表中选择需要的类型 如图10 24所示 54 4 其它属性设置在ADO属性对话框中选择 All 标签 其中以表格的形式列举了ADO控件的所有属性 如果需要修改更多的信息可以在这里进行 如图10 25所示 55 10 5 3DataGrid控件DataGrid控件 网格控件 是一个常用的ActiveX控件 通常与Adodc控件一同使用 使用它可以方便的显示数据库表 56 2 在对话框中选中 MicrosoftDataGridControl6 0 SP6 OLEDB 单击 OK 按钮 这样控件即出现在对话框中 调节该控件的大小及位置 结果如图10 26所示 57 配置网格控件的属性在DataGrid控件上单击鼠标右键 在弹出的菜单中选中 Properties 命令 出现ADO属性对话框 在其中选择 ALL 标签 其中以表格的形式列举了网格控件的属性 如图10 28所示 58 运行程序在VisualC 中运行这个程序 将得到如图10 29所示的结果 59 10 6使用ADOAPI访问数据库 10 6 1建立VC工程首先创建名为techInfo的工程 此处创建VC工程的方法与10 5 1节的一样 创建完工程后进行界面设计 如图10 30所示 60 10 6 2连接数据源1 导入库文件在VisualC 中要使用ADOAPI 首先要在头文件导入相应的库文件 可以在StdAfx h中添加下面的语句 import c programfiles commonfiles system ado msado15 dll no namespacerename EOF ADOEOF 为了避免库文件中的EOF与系统定义的EOF的名字相冲突 这是使用了rename函数将库文件的EOF重命名为ADOEOF 2 初始化COM环境由于ADO库是一个COMDLL 因此在调用ADO之前 需要初始化OLE COM库 可以通过在BOOLCTechInfoApp InitInstance 下添加如下代码实现 CoInitialize NULL 61 3 打开到数据库的连接Connection对象代表了打开的与数据库的连接 使用它的Open方法 可以与数据库建立连接 相应代码如下 HRESULTCTechInfoDlg OpenConnection HRESULThr CStringconnStr Provider SQLOLEDB 1 Password jxgl PersistSecurityInfo True UserID sa InitialCatalog JXGL DataSource ONTOLOGY hr m pConnection CreateInstance uuidof Connection if SUCCEEDED hr m pConnection ConnectionString bstr t connStr hr m pConnection Open bstr t L bstr t L bstr t L adModeUnknown else MessageBox ConnectionError 62 4 打开记录集Recordset对象代表来自基本表或命令执行结果的记录集 使用它的Open方法可以打开一个记录集 相应的代码如下 HRESULTCTechInfoDlg OpenRecordset HRESULThr m pRecordset CreateInstance uuidof Recordset if SUCCEEDED hr hr m pRecordset Open SELECT FROM课程 IDispatch m pConnection adOpenDynamic adLockOptimistic adCmdText m pRecordset MoveFirst ShowFileds else MessageBox OpenRecordsetError returnhr 63 10 6 3使用结果集对象操作数据1 读取数据使用下面的方法可以从结果集中取得数据并显示在编辑框中 voidCTechInfoDlg ShowFileds if m pRecordset BOF 64 m Edit2 SetWindowText itemValue vt VT NULL char bstr t itemValue itemValue m pRecordset GetFields GetItem long 2 Value m Edit3 SetWindowText itemValue vt VT NULL char bstr t itemValue itemValue m pRecordset GetFields GetItem long 3 Value m Edit4 SetWindowText itemValue vt VT NULL char bstr t itemValue 65 2 滚动结果集Recordset对象的MoveFirst MoveLast MoveNext和MovePrevious方法 用于移动记录的指针 MoveFirst MoveLast MoveNext和MovePrevious方法分别表示移动到第一条记录 移动到最后一条记录 移动到下一条记录和移动到前一条记录 voidCTechInfoDlg OnButtonFirst 点击first按钮 m pRecordset MoveFirst ShowFileds voidCTechInfoDlg OnButtonPrev 点击Prev按钮 if m pRecordset BOF m pRecordset MovePrevious ShowFileds if m pRecordset BOF m Edit1 SetWindowText 66 m Edit2 SetWindowText m Edit3 SetWindowText m Edit4 SetWindowText voidCTechInfoDlg OnButtonNext 点击next按钮 if m pRecordset ADOEOF m pRecordset MoveNext ShowFileds 67 if m pRecordset ADOEOF m Edit1 SetWindowText m Edit2 SetWindowText m Edit3 SetWindowText m Edit4 SetWindowText voidCTechInfoDlg OnButtonLast 点击last按钮 m pRecordset MoveLast ShowFileds 68 3 添加记录如果希望向数据库中添加一条记录 首先调用AddNew函数插入一条新记录 随后为记录的每一个字段符值 最后还应该调用Update函数将新插入的数据保存到数据源中 voidCTechInfoDlg OnButtonAdd 添加一条记录 try CStringitemValue m Edit1 GetWindowText itemValue m pRecordset AddNew m pRecordset GetFields GetItem long 0 Value variant t itemValue HRESULThr m pRecordset Update if SUCCEEDED hr MessageBox 记录添加成功 catch com error 69 本程序最终的执行结果如图10 31所示 70 10 7Web及数据库访问技术 10 7 1Web技术概述万维网 WorldWideWe 自从1989年从欧洲原子能研究中心CERN诞生以来 其规模以惊人的速度不断扩张 几乎遍及世界的每一个角落 WWW并不等同于Internet 同FTP 文件传输 Telnet 远程登录 E mail 电子邮件 类似 它是建立在Internet上的一种应用 从架构上看 WWW可以分为服务器端和客户端两部分 服务器提供资源 而客户端是资源的接收者 浏览器是客户端的基本组建 Microsoft公司的InternetExplorer和Netscape公司的NetscapeNavigator Communicator是目前最流行的两种浏览器 InternetExplorer是和Windows操作系统捆绑在一起的 NetscapeNavigator则可以免费下载 在访问某一网页时 浏览器将向服务器端发出请求 服务器端将所请求的页面传送给浏览器 浏览器会对上面的文本和格式命令进行解释 并在屏幕中显示出来 这里采用的通讯方式是HTTP 即超文本传输协议 HyperTestTransferProtocol 71 WWW是一个结构性的架构 通过WWW可以访问Internet上数以百万计机器中的文档 这些文档是通过URL定位的 URL即UniformResourceLocator 统一资源定位符 它是资源标志符URI的子集 URL的语法格式如下 protocol hostdnorip port path file URL包含以下三部分 协议 http ftp file news gopher telnet是常见的协议 主机的DNS名 域名系统将DNS名被解析为主机的IP地址 http协议默认的端口号是80 如果不使用默认端口 还需要在主机名后面加上端口号 如http localhost 8080 文件名 这里是相对于默认Web目录的一个路径 如URL 72 10 7 2浏览器 服务器体系结构Web信息系统中通常采用B S 浏览器 服务器 体系结构 B S结构是将Web技术与C S结构相结合的模式 它实现了开发环境与应用环境的分离 客户端使用Web浏览器实现与用户的交互 应用层使用Web服务器 绝大部分的业务逻辑都在这里实现 数据层即数据库及DBMS 负责对数据库中数据的存取等操作 典型的B S结构如图10 32所示 73 B S结构的应用程序工作的大致步骤如下 用户通过浏览器向Web服务器发送Http请求 Web服务器解析用户提交的请求 根据预定义的逻辑进行处理 在此期间如果需要访问数据库 则向数据库服务器发送请求数据命令 数据库服务器根据该命令执行存取等操作 并将结果返回给Web服务器 Web服务器将最终的处理结果以HTML或其它格式发送给浏览器 浏览器解析HTML等信息 将结果展现给用户 74 10 7 3Web数据库接口技术在Web应用程序中连接数据库同样需要通过相应的接口来完成 常用的连接数据库的方法有ODBC 见本书9 11 1 JDBC等 究竟采用哪种方法需要综合考虑使用的动态网页技术以及使用的数据库应用系统等因素 JDBCAPI为Java开发者使用数据库提供了统一的编程接口 它由一组Java类和接口组成 JDBCAPI使得开发人员可以使用纯Java的方式来连接数据库 并进行操作 在开发数据库应用程序时 JDBC通常与JSP Servlet等技术结合使用 75 JDBC中常用的类有如下几个 DiverManager类 驱动程序管理器 用于加载驱动程序 与数据库建立连接 Connection类 代表已经加载的驱动程序和数据库之间建立的连接 PreparedStatemnet类 用于处理预编译的SQL语句 CallableStatement类 用于处理存储过程 ResultSet类 用于处理数据库的记录集 76 10 7 4常用的动态网页技术1 CGICGI是CommonGatewayInterface 公共网关接口 的缩写 是一种比较早的动态网页制作技术 许多程序设计语言都可以用来进行CGI的编写 像C C Perl以及VB等 所以程序设计人员可以根据自己的特长选择适当的语言来编写CGI 这样也就增大了CGI的使用面 但是 CGI的执行效率要比其他动态网页技术低 并且不易对其进行维护 现在已经很少使用 2 ASPASP的全称是ActiveServerPages 是一种平台相关的动态网页技术 只能在Microsoft的平台下使用 ASP使用VBScript和Jscript作为脚本语言 更精确地说 ASP是一个中间件 它将Web上的请求转入到一个解释器中 在这个解释器中分析 执行ASP的Script 而这时可以在这个中间件中创建一个新的COM对象 对这个对象中的属性和方法进行操作和调用 同时再通过这些COM组件完成更多的工作 77 3 PHPPHP是另一种服务器端的脚本语言 可以由其服务器端的PHP引擎来对其进行动态编译和执行 PHP在语法上与C语言和Perl语言相似 PHP是开放式的 所以不断有新的内容加进来 使其具有更强大的功能 另外 PHP可以支持多种平台和数据库 但是PHP在可扩充性上不及ASP和JSP 4 JSPJSP JavaServerPages 是SUN公司在推出Java程序设计语言与Servlet技术之后 另外推出的一种动态网页制作技术 它与Servlet和整个Java体系的Web应用技术相结合 可以用于创建先进 安全和跨平台的动态网站 78 10 8Web数据库技术实例10 8 1安装及配置Web服务器本节的例子中选用Tomcat5作为Web服务器 Tomcat是Apache基金会的Jakarta项目中的一个核心项目 它是当前使用十分广泛的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 土石方工程材料选择与运输方案
- 牛羊屠宰厂建设项目环境影响报告书
- 风光制氢醇一体化项目节能评估报告
- 国际销售合同4篇
- 2025年叉车考试难题库及答案
- 建筑施工电梯安装、拆除专项建筑施工组织设计及对策
- 上海市房地产经纪合同模板
- 离婚后宅基地房屋分割与继承权处理协议
- 低碳环保社区物业合同转让及绿色生活协议
- 离婚后子女抚养费增加与共同财产分割补充协议
- 2025年煤矿企业主要负责人安全生产理论考试笔试试题含答案
- 煤矿安全规程2025版解读
- 监狱公选面试题库及答案
- 尿培养的采集
- 具有法律效应的还款协议书6篇
- 东航空乘英语考试题目及答案
- 2025绿植租赁协议(简易版)
- T-AOPA0062-2024电动航空器电推进系统动力电机控制器技术规范
- 《三级工学一体化师资培训》课件-第四课:教学活动策划
- 2024年一级建造师《民航机场工程管理与实务》真题及答案
- 2025年全国企业员工全面质量管理知识竞赛题及参考答案
评论
0/150
提交评论