SQLServer数据库应用系统的开发.ppt
第11章 数据库应用系统的开发,11.1 软件开发周期及各阶段的任务,11.2 数据库应用系统,11.3 创建应用系统数据库,11.4 VB/SQL Server学生成绩管理系统,11.5 ASP.NET(C#)/SQL Server学生成绩管理系统,海量IT技术教程下载,11.1 软件开发周期及各阶段的任务,11.1.1 软件定义开发一个数据库应用系统首先要进行用户的需求分析,确定软件系统的功能、性能需求,搞清楚“做什么”。首先,进行软件系统的可行性研究。其次,进行软件需求分析。软件需求分析的目标是深入描述待开发数据库应用软件的功能、性能需求、数据的安全与完整性约束等方面的需求,及与其他系统元素的接口。1需求分析的主要任务 通过调查软件使用部门的业务活动,明确用户对软件系统的功能需求,确定待开发软件系统的功能。综合分析用户的信息流程及信息需求,确定将存储哪些数据,及这些数据的源和目标。分析用户对数据的安全性和完整性要求,确定系统的性能需求和运行环境约束。构建软件系统的逻辑模型,为软件要素制定验收准则,以及软件验收测试计划。对于大型、复杂软件系统的主要功能、接口、人机接口等,可能还要进行模拟或建造原型,以便向用户和开发方展示待开发软件系统的主要特征,软件需求分析过程有时需要反复多次,最终才能使用户与开发者达成共识。,11.1.1 软件定义,2软件需求信息获取 考察现场或跟班作业,了解现场业务流程。进行市场调查。访问用户和应用领域的专家。查阅与原应用系统或应用环境有关的记录。3用户需求的描述方法描述用户需求传统的方法大多采用结构化的分析方法(Structured Analysis,SA),即按应用部门的组织结构,对系统内部的数据流进行分析,逐层细化,用数据流程图(Data Flow Diagram,DFD)描述数据在系统中的流动和处理,并建立相应的数据字典(Data Dictionary,DD)。数据流程图使用的主要符号如图11.1所示。,图11.1 数据流程图使用的主要符号,11.1.1 软件定义,图11.2为学生选课系统需求分析顶层数据流程图,图11.3为第二层的数据流程图,图11.4是对图11.3中的“查询”进一步细化的数据流程图。在需求分析过程中数据流程图的细化程度取决于后继代码实现的需要,有兴趣的同学可对图11.3中的“编辑”和“统计”进一步细化。,图11.2 学生选课系统需求分析的顶层数据流程图,11.1.1 软件定义,数据字典的主要内容。数据项:包括数据项名、类型、长度等。数据结构:反映了数据之间的组合关系,包括数据结构名、含义说明及定义。数据流:数据流是数据在系统内传输的路径,包括数据流名、说明、数据的源和目标等。数据存储:是数据停留或保存的地方,包括数据存储名、说明等。处理过程:主要包括:过程名、输入参数、输出参数、说明等。,图11.3 学生选课系统需求分析的第二层数据流程图,11.1.1 软件定义,图11.4 对图11.3中的“查询”进一步细化的数据流程图,11.1.2 软件开发,1概要设计概要设计又称为总体设计,是对需求规格说明中提供的软件系统逻辑模型进一步分解,其完成的主要工作有:数据建模。将应用需求中的数据对象、对象的属性、对象之间的联系抽象为信息世界的概念模型,并对其进行描述,例如,用E-R模型描述学生管理系统的概念模型。在软件的功能设计方面,建立软件系统的总体结构和各子系统之间、各模块之间的关系,定义各子系统接口和各功能模块的接口。生成概要设计规格说明和组装测试计划。评审概要设计的质量,重点评审概要设计是否支持软件需求规格说明。进一步充实数据字典。概要设计的目标:总体结构具有层次性,尽量降低模块接口的复杂度。进行概要设计时,可提出多种设计方案,并在功能、性能、成本、进度等方面对各种方案进行比较,选出一种“最佳方案”。概要设计的阶段性成果:概要设计说明书、数据库的概念模型设计、扩充后的数据字典、组装测试计划等文档。,11.1.2 软件开发,2详细设计详细设计又称为过程设计。通过对概要设计的模型表示进一步细化和转换,得到软件详细的数据结构和算法。详细设计的主要内容如下:对于数据建模,根据概念模型设计数据库的逻辑模型,根据系统对数据安全性和完整性的要求,确定数据的完整性和安全性规则及实现策略;在功能设计方面采用结构化的设计方法对概要设计产生的功能模块进一步细化,形成可编程的结构模块,并设计各模块的单元测试计划。详细设计的阶段性成果:详细设计规格说明书、单元测试计划等设计文档。3编码与单元测试主要任务包括如下内容:基于某一数据库管理系统实现数据库的逻辑模型,如创建数据库、表等,按照数据的完整性和安全性实现策略,实现数据的完整性和安全性,并进行相应的测试工作,同时做好测试记录;选定某一程序设计语言实现各功能模块,并进行相应的测试。一般来说,对软件系统各功能模块所采用的分析方法、设计方法、编程方法,以及所选用的程序设计语言应尽可能保持一致。,11.1.2 软件开发,编码阶段应注意遵循编程标准、养成良好的编程风格,以便编写出正确的便于理解、调试和维护的程序模块。编码与单元测试的阶段性成果:通过单元测试的各功能模块的集合、详细的单元测试报告等文档。4组装测试根据概要设计提供的软件结构、各功能模块的说明和组装测试计划,将数据加载到数据库中,对经过单元测试检验的模块按照某种选定的策略逐步进行组装和测试,检验应用系统在正确性、功能完备性、容错能力、性能指标等方面是否满足设计要求。阶段性成果:满足概要设计要求的详细设计报告;可运行的软件系统和源程序清单;组装测试报告等文档。5验收测试又称为确认调试,主要任务:按照验收测试计划对软件系统进行测试,检验其是否达到了需求规格说明中定义的全部功能和性能等方面的需求。阶段性成果:验收测试报告、项目开发总结报告、软件系统、源程序清单、用户操作手册等文档资料。最后,由专家、用户负责人、软件开发和管理人员组成软件评审小组对软件验收测试报告、测试结果和应用软件系统进行评审,通过后,软件产品正式通过验收,可以交付用户使用。,11.1.3 软件的使用与维护,软件开发工作结束后,软件系统即可投入运行,但由于软件的应用环境不断变化,因此,在软件的整个运行期内,有必要对应用系统有计划地维护,使软件系统持久地满足用户的需求。软件使用和维护阶段的主要工作内容如下:在软件使用过程中,及时收集被发现的软件错误,并撰写“软件问题报告”,以便改正软件系统中潜藏的错误;根据数据库维护计划,对数据库性能进行监测,当数据库出现故障时,对数据库进行转储和恢复,并做相应的维护记录;根据软件系统恢复计划,当软件系统出现故障时,进行软件系统恢复,并做相应的维护记录。,11.2 数据库应用系统,11.2.1 数据库的连接方式客户端应用程序或应用服务器向数据库服务器请求服务时,首先必须和数据库建立连接。虽然RDBMS都遵循SQL标准,但不同厂家开发的数据库管理系统有差异,存在适应性和可移植性等方面的问题,因此,人们开始研究和开发连接不同RDBMS的通用方法、技术和软件。1ODBC数据库接口ODBC即开放式数据库互连(Open Database Connectivity),是微软公司推出的一种实现应用程序和关系数据库之间通信的接口标准。符合标准的数据库就可以通过SQL语言编写的命令对数据库进行操作,但只针对关系数据库。目前所有的关系数据库都符合该标准(如SQL Server,Oracle,Access,Excel等)。ODBC本质上是一组数据库访问API(应用程序编程接口),由一组函数调用组成,核心是SQL语句,其结构如图11.5所示。,11.2.1 数据库的连接方式,图11.5 ODBC数据库接口,11.2.1 数据库的连接方式,2OLE DB数据库接口OLE DB即数据库链接和嵌入对象(Object Linking and Embedding DataBase)。OLE DB是微软提出的基于COM思想且面向对象的一种技术标准,目的是提供一种统一的数据访问接口访问各种数据源,这里所说的“数据”除了标准的关系型数据库中的数据之外,还包括邮件数据、Web上的文本或图形、目录服务(Directory Services),以及主机系统中的文件和地理数据和自定义业务对象等。OLE DB标准的核心内容就是提供一种相同的访问接口,使得数据的使用者(应用程序)可以使用同样的方法访问各种数据,而不用考虑数据的具体存储地点、格式或类型,其结构图如图11.6所示。,图11.6 OLE DB数据库接口,11.2.1 数据库的连接方式,3ADO数据库接口ADO(ActiveX Data Objects)是微软公司开发的基于COM的数据库应用程序接口,通过ADO连接数据库,可以灵活地操作数据库中的数据。图11.7展示了应用程序通过ADO访问SQL Server数据库接口。从图中可看出,使用ADO访问SQL Server数据库有两种途径:一种是通过ODBC驱动程序,另一种是通过SQL Server专用的OLE DB Provider,后者有更高的访问效率。,图11.7 ADO访问SQL Server的接口,11.2.1 数据库的连接方式,4ADO.NET数据库接口ASP.NET使用ADO.NET数据模型。该模型从ADO发展而来,但它不只是对ADO的改进,而是采用了一种全新的技术。主要表现在以下3个方面:ADO.NET不是采用ActiveX技术,而是与.NET框架紧密结合的产物。ADO.NET包含对XML标准的完全支持,这对于跨平台交换数据具有重要的意义。ADO.NET既能在与数据源连接的环境下工作,又能在断开与数据源连接的条件下工作。ADO.NET 提供了面向对象的数据库视图,并且在ADO.NET对象中封装了许多数据库属性和关系。最重要的是,ADO.NET 通过很多方式封装和隐藏了很多数据库访问的细节。可以完全不知道对象在与 ADO.NET 对象交互,也不用担心数据移动到另外一个数据库,或者从另一个数据库获得数据的细节问题。ADO.NET架构如图11.8所示。数据集是实现ADO.NET断开式连接的核心,从数据源读取的数据先缓存到数据集中,然后被程序或控件调用。数据源可以是数据库或者XML数据。,11.2.1 数据库的连接方式,数据提供器用于建立数据源与数据集之间的联系,它能连接各种类型的数据,并能按要求将数据源中的数据提供给数据集,或者从数据集向数据源返回编辑后的数据。,图11.8 ADO.NET架构总览,11.2.1 数据库的连接方式,5JDBC数据库接口JDBC(Java Data Base Connectivity)是Java Soft公司开发的,一组Java语言编写的用于数据库连接和操作的类和接口,可为多种关系数据库提供统一的访问方式。通过JDBC完成对数据库的访问包括4个主要组件:Java应用程序、JDBC驱动管理器、驱动器和数据源。在JDBCAPI中有两层接口:应用程序层和驱动程序层,前者使开发人员可以通过SQL调用数据库和取得结果,后者处理与具体数据库驱动程序的所有通信。使用JDBC接口对数据库操作有如下优点:.JDBCAPI与ODBC十分相似,有利于用户理解;使编程人员从复杂的驱动器调用命令和函数中解脱出来,而致力于应用程序功能的实现;JDBC支持不同的关系数据库,增强了程序的可移植性。使用JDBC的主要缺点:访问数据记录的速度会受到一定影响,此外,由于JDBC结构中包含了不同厂家的产品,这给数据源的更改带来了较大麻烦。6数据库连接池技术对于网络环境下的数据库应用,由于用户众多,使用传统的JDBC方式进行数据库连接,系统资源开销过大成为制约大型企业级应用效率的瓶颈,采用数据库连接池技术对数据库连接进行管理,可以大大提高系统的效率和稳定性。,11.2.2 客户/服务器(C/S)模式,对于一般的数据库应用系统,除了使用数据库管理系统外,需要设计适合普通人员操作数据库的应用程序。目前,流行的开发数据库应用程序的工具主要包括Visual BASIC,Visual C+,Visual FoxPro,Delphi,PowerBuilder等。数据库应用程序与数据库、数据库管理系统之间的关系如图11.9所示。,图11.9 数据库应用程序与数据库、数据库管理系统之间的关系,11.2.3 浏览器/服务器(B/S)模式,基于Web的数据库应用采用浏览器/服务器模式,也称B/S结构。第一层为浏览器,第二层为Web服务器,第三层为数据库服务器。浏览器是用户输入数据和显示结果的交互接口,用户在浏览器窗体中输入数据,然后将窗体中的数据提交并发送到Web服务器,Web服务器应用程序接受并处理用户的数据,通过数据库服务器,从数据库中查询需要的数据(或把数据录入数据库)送Web服务器,Web服务器把返回的结果插入HTML页面,传送到客户端,在浏览器中显示出来,如图1.10所示。,图11.10 浏览器/服务器结构,11.3 创建应用系统数据库,11.3.1 学生成绩数据库表结构学生成绩数据库XSCJ使用的表结构如下。1学生信息表(XS)学生信息表(XS)存放学生的基本信息。学生的基本信息表结构字段说明见表11.1。,表11.1 学生的基本信息表字段说明,2课程信息表(KC)课程信息表(KC)存放课程的基本信息,课程的基本信息表结构字段说明见表11.2。,表11.2 课程的基本信息表字段说明,11.3.1 学生成绩数据库表结构,3学生课程成绩表(XSKE)学生课程成绩表(XSKE)存放学生课程的成绩信息,学生课程的成绩表结构字段说明见表11.3。,表11.3 学生课程的成绩表字段说明,11.3.2 学生成绩数据库数据样本,1学生信息表(表名XS)数据样本,2课程表(表名KC)数据样本,11.3.2 学生成绩数据库数据样本,3学生与课程表(表名XS_KC)数据样本,11.4 VB/SQL Server学生成绩管理系统,11.4.1 连接SQL Server数据库1通过ODBC连接SQL Server数据库数据库管理器是VB6.0环境下可视化管理数据库的工具,下面介绍如何通过数据库管理器以ODBC方式连接SQL Server。(1)创建ODBC数据源首先在“控制面板”的“管理工具”中创建ODBC数据源,方法如下。在“控制面板”的“管理工具”中选择“ODBC数据源”图标双击,出现如图11.11所示的接口,在图中单击“添加”按钮,进入如图11.12所示的接口。,图11.11 ODBC数据源接口 图11.12 安装数据源驱动程序的接口,11.4.1 连接SQL Server数据库,在图11.12的接口中,选择安装的驱动程序为“SQL Server”,单击“完成”按钮,出现如图11.13所示的接口。,图11.13 安装数据源驱动程序的接口,11.4.1 连接SQL Server数据库,在图11.13中,单击“下一步”按钮,出现如图11.14所示的接口。,图11.14 选择SQL Server服务器登录认证方式的接口,11.4.1 连接SQL Server数据库,在图11.14所示的接口中,选择SQL Server服务器登录认证方式,在此选择为SQL Server认证方式,并输入用户登录账号和密码,本例中以系统管理员身份sa登录。执行“下一步”,出现如图11.15所示的接口。在如图11.15所示的接口中,可更改默认的数据库,在此设置默认数据库为XSCJ,然后按照提示完成剩余工作。(2)连接SQL Server数据库创建ODBC数据源后,即可通过VB6.0提供的数据库管理器,连接SQL Server数据库,使用步骤如下。在VB接口中,执行“外接程序”菜单的“可视化数据管理器”命令。在“文件”菜单中执行“新建”可新建数据库,执行“打开”可打开指定的数据库,在此,执行以“ODBC”方式打开XSCJ数据库,执行结果如图11.16所示。,11.4.1 连接SQL Server数据库,图11.15 选择默认数据库的接口,11.4.1 连接SQL Server数据库,图11.16 通过数据管理器连接XSCJ数据库,11.4.1 连接SQL Server数据库,在如图11.6所示的接口中,可在数据库中创建表、对表中的数据进行查询、插入、删除、修改操作。在SQL文本框中,可输入SQL语句,并单击中“执行”按钮执行。2通过OLE连接SQL Server数据库数据环境设计器(Data Environment)是用于建立数据库连接和定义命令的图形接口,下面介绍数据环境设计器下通过OLE建立与SQL Server数据库的连接。(1)给工程添加数据环境设计器在VB接口的工程菜单中选择“添加Data Environment”菜单项,出现如图11.17所示的接口,在属性窗口可修改默认的数据环境对象名;(2)通过OLE建立与数据库的连接 在图11.17的Connection对象图标上右击,出现一快捷菜单,选择“属性”菜单项,出现如图11.18所示的接口。在图11.18中,对于“提供者”选项卡,选择“Microsoft OLE DB Provider for SQL Server”;对于“连接”选项卡,设置各项连接属性,“在服务器上选择数据库”下拉表中选择指定的数据库。如图11.19所示,单击“测试连接”按钮,测试成功,则建立了与数据库的连接。,11.4.1 连接SQL Server数据库,图11.17 数据环境设计器的接口,11.4.1 连接SQL Server数据库,图11.18 建立数据库连接的接口,11.4.1 连接SQL Server数据库,图11.19 设置数据库连接属性的接口,11.4.1 连接SQL Server数据库,3ADO Data和ADODB连接SQL Server数据库(1)用可视ADODC控件连接数据库 在VB选“工程”菜单“部件”菜单项,系统打开“部件”对话框,如图11.20所示。,图11.20“部件”对话框,11.4.1 连接SQL Server数据库,选择两个ADO控件,他们是“Microsoft ADO Data Control 6.0”和“Microsoft DataGrid Control 6.0”。最后单击“确定”按钮,此后VB6.0工具栏中就增加了上述两个控件的图标。前者用于连接数据库,后者用于以表格形式显示数据库表的内容。在VB窗体中加入“Microsoft ADO Data Control 6.0”控件(简称ADODC),命名合适的名称,如StuADO。设置控件ADODC的ConnectionString属性。选择该属性,如图11.21所示。单击“”,系统打开对话框,如图11.22所示。单击“生成”,系统显示“数据链接属性”对话框,如图11.23所示。选择“连接”选项卡,进行设置。最后单击“确定”按钮。设置ADODC的RecordSource属性。打开“属性页”,如图11.24所示。,11.4.1 连接SQL Server数据库,图11.21 设置ConnectionString属性图 图11.22 生成连接字符串,11.4.1 连接SQL Server数据库,图11.23“数据链接属性”对话框 图11.24 属性页,11.4.1 连接SQL Server数据库,选择命令类型:1-adCmdText:表示命令为SQL语句。2-adCmdTable:表示命令为一个表名。4-adCmdStoredProc:表示命令是一个存储过程名。8-adCmdUnknown:表示不确定命令类型。如果命令类型为表名或存储过程名,则选择对应的名称,否则在命令文本中写入SQL语句。最后单击“确定”按钮。数据源控件连接数据库完成。此时可以直接访问它,或者可以充当数据表格控件的数据源使用。(2)ADODB.CONNECTION对象连接数据库 创建ADODB.CONNECTION对象:Private SqlCon As New ADODB.ConnectionSqlCon.Provider=SQLOLEDBSqlCon.Open Server=microsof-cee903dcr;DataBase=XSCJ;UID=wmx;PWD=1234;用ADODB.CONNECTION对象:Private SqlCmd As New ADODB.Command指定Command对象所使用的连接SqlCmd.ActiveConnection=SqlConSqlCmd.CommandText=select*from XS执行命令Set SqlRes=SqlCmd.Execute,11.4.2 学生成绩管理系统主接口,本系统是一个用VB实现的简单的学生成绩管理系统,使用可视ADODC控件和ADODB对象来访问后台数据库服务器,系统包含学生信息的查询、学生信息的录入修改删除、学生成绩的录入修改。系统主页面如图11.25所示。主要功能:主接口,导航作用,单击可进入操作窗口。创建过程:,图11.25 系统主接口,11.4.2 学生成绩管理系统主接口,1创建菜单创建菜单如图11.26所示。,图11.26 创建菜单,11.4.2 学生成绩管理系统主接,2创建工具条创建工具条如图11.27所示。,图11.27 创建工具条,创建工具条包括:先创建工具条,创建ImageList控件,导入图标,最后与菜单关联。功能包括:退出系统、学生信息查询、学生信息修改、学生成绩修改等。其index分别为3,6,7,8。,11.4.2 学生成绩管理系统主接,3主要代码菜单Click的处理过程退出系统菜单Private Sub msQuitSys_Click()EndEnd Sub学生信息修改菜单Private Sub msStuInfo_Click()AddStu.ShowEnd Sub学生成绩录入菜单Private Sub msStuScore_Click()AddStuScore.ShowEnd Sub学生信息查询菜单Private Sub msStuSearch_Click()StuSearch.ShowEnd Sub,11.4.2 学生成绩管理系统主接,工具条Click的处理单击工具条的图标,分别对应调用菜单中的处理过程。Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)学生信息查询图标If Button.Index=6 Then msStuSearch_ClickEnd If学生信息修改图标If Button.Index=7 Then msStuInfo_ClickEnd If 学生成绩修改图标If Button.Index=8 Then msStuScore_ClickEnd If退出系统图标If Button.Index=3 Then msQuitSys_ClickEnd IfEnd Sub,11.4.3 学生信息查询,目的与要求:了解使用控件如何显示数据库中的数据,同时了解查询的基本方法。程序接口:程序接口如图11.28所示。,图11.28 程序接口,11.4.3 学生信息查询,主要功能:可以满足简单查询的需要,什么条件也不输则分页显示所有记录,可以输入条件进行简单的模糊查询,各条件之间为与的关系,在查询的结果中移动记录指针可以查看这个学生的具体选课信息。创建过程:在窗体上放入学生信息查询的ADODC和学生选课信息的ADODC、创建两个学生信息显示的DataGrid和学生选课信息显示的DataGrid,并分别起名为StuADO,StuKCADO,StuDG,StuKCDG。放入学号Edit、姓名Edit和专业下拉列表框。为了美观,StuKCADO隐藏在StuKCDG后面。设置StuADO的ConnectionString属性为:Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;User ID=sa;Initial Catalog=XSCJ;Data Source=microsof-cee903dcr 设置StuADO的RecordSource属性为:select*from XS,CXB where XS.XB=CXB.XB 设置StuDG的DataSource属性为StuADO。,11.4.3 学生信息查询,设置StuKCADO的ConnectionString属性为:Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;User ID=sa;Initial Catalog=XSCJ;Data Source=microsof-cee903dcr 设置StuKCADO的RecordSource属性为:select*from XS,KC,XS_KCwhere XS.XH=XS_KC.XH and KC.KCH=XS_KC.KCH 设置StuKCDG的DataSource属性为StuKCADO。实现过程:直接打开时由于控件属性的设置,所以显示所有记录,当输入查询条件时单击查询按钮,则调用MMakeSqlStr函数产生查询字符串,然后重新设置控件的属性,打开控件显示查询结果集。当专业改变时调用StuZY_Click函数来分别显示所选的专业学生记录,当在查询结果学生信息记录集中移动记录指针时,可以在下面的选课表中看到学生选课的信息。,11.4.3 学生信息查询,主要代码:根据学号、姓名的输入信息和专业的选择生成模糊查询的SQL字符串。Dim SqlStr As String 保存查询字符串的Public Sub MakeSqlStr()产生查询字符串的SqlStr=If Trim(StuXH)Then SqlStr=and XH like%+Trim(StuXH.Text)+%End IfIf Trim(StuXM)Then SqlStr=SqlStr+and XM like%+Trim(StuXM.Text)+%End IfIf Trim(StuZY)所有专业 Then SqlStr=SqlStr+and ZY=+Trim(StuZY.Text)+End IfEnd Sub,11.4.3 学生信息查询,“专业”列表Click事件处理。显示选择当前专业,并且符合学号、姓名查询条件的学生的信息。Private Sub StuZY_Click()当专业改变时重新从数据库中提取数据MakeSqlStrStuADO.RecordSource=select*from XS,CXB where XS.XB=CXB.XB _&SqlStr+and ZY=+Trim(StuZY.Text)+StuADO.RefreshEnd Sub“查询”Click事件处理。用生成的模糊查询的SQL字符串,来刷新StuADO,并显示到关联的DataGrid中。Private Sub StuSch_Click()单击查询按钮从数据库中提取数据MakeSqlStrStuADO.RecordSource=select*from XS,CXB where XS.XB=CXB.XB _&SqlStrStuADO.RefreshEnd Sub,11.4.3 学生信息查询,学生信息显示的DataGrid的Click事件处理。以当前学生信息的学号作为查询条件,从XS_KC表中查找当前学生的选课记录,并显示到学生课程显示的StuKCDG中。Private Sub StuDG_Click()单击DataGrid中学生记录,在下面显示学生课程成绩StuKCADO.RecordSource=select*from XS,KC,XS_KC _&Where XS.XH=XS_KC.XH And KC.KCH=XS_KC.KCH _&and XS.XH=+StuADO.Recordset(XH)+StuKCADO.RefreshEnd Sub注意:为了方便控件显示学生性别,这里建立了一个表CXB(XB bit,XBM varchar(4)存放数据1,男;0,女,这样把要显示的表与其连接便可以显示中文的性别,如有类似情况可参照此方法。,11.4.4 学生信息修改,目的要求:了解对数据库操作的基本方法(增、删、改)。程序接口:程序接口如图11.29所示。,图11.29 程序接口,11.4.4 学生信息修改,主要功能:用户可以单击下面的表格,用户资料便反映到上面的控件中去,这时可以修改控件中的信息,单击更新实现修改。如输入一个新的学号,单击更新按钮实现记录的添加,当选中当前记录,单击删除按钮时,则可以删除此学生记录,双击照片可以选择学生照片,用于更新学生照片信息。创建过程:在窗体上放入ADODC,DataGrid并起名为StuADO,StuDG。设置StuADO的ConnectionString属性为:Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;User ID=sa;Initial Catalog=XSCJ;Data Source=microsof-cee903dcr 设置StuADO的RecordSource属性为:select*from XS,CXB where XS.XB=CXB.XB 设置StuDG的DataSource属性为StuADO。在窗体上放入Image控件并起名为StuPic,用来显示学生照片,选择Image控件的DataSource属性为StuADO,设置DataField属性为ZP,这就完成了Image控件和数据库的绑定,记录集移动时Image里面会显示当前学生的照片。,11.4.4 学生信息修改,并在窗体上放入如图所需控件。实现过程:当单击DataGrid中的记录时记录集游标也跟着移动,在StuADO_MoveComplete事件中取出本条记录显示在上面的控件中,可以在控件中修改学生信息,双击选择学生照片,按更新调用StuUpd_Click更新到数据库中,当输入新的学生记录时按更新调用StuUpd_Click添加到数据库中,也可以按删除调用StuDel_Click函数删除此记录,系统会调用CheckXs触发器来保持数据的参照完整性。1SQL Server数据库中定义的触发器为了保证数据的参照完整性,在删除学生时要检查成绩表中此学生的记录,有就删除。此过程放在触发器中完成的。CREATE TRIGGER CheckXs ON dbo.XS FOR DELETE ASdelete from XS_KCwhere XH in(select XH from deleted),11.4.4 学生信息修改,2VB主要代码General中定义的全局变量Private FileName As StringPrivate SqlCon As New ADODB.ConnectionPrivate SqlRes As New ADODB.RecordsetPrivate SqlCmd As New ADODB.Command Form加载时打开数据库连接Private Sub Form_Load()SqlCon.Provider=SQLOLEDB SqlCon.Open Server=microsof-cee903dcr;DataBase=XSCJ;UID=wmx;PWD=1234;End Sub Form卸载时关闭数据库连接Private Sub Form_Unload(Cancel As Integer)SqlCon.CloseEnd Sub,11.4.4 学生信息修改,学生信息记录集记录指针移动完成事件代码当单击StuADO控件记录移动图标时产生,在这个过程中取出当前记录中的学生信息,更新到学号、姓名等显示控件中去,实现显示和StuADO控件记录移动连动。Private Sub StuADO_MoveComplete(ByVal adReason As ADODB.EventReasonEnum,ByVal pError As ADODB.Error,adStatus As ADODB.EventStatusEnum,ByVal pRecordset As ADODB.Recordset)If Not pRecordset.EOF And Not pRecordset.BOF Then StuXH.Text=pRecordset(XH)StuXM.Text=pRecordset(XM)StuCSSJ.Text=pRecordset(CSSJ)StuZY.Text=pRecordset(ZY)StuZXF.Text=pRecordset(ZXF)StuBZ.Text=CStr(pRecordset(BZ)&)If pRecordset(XB)=0 Then StuXBF.Value=True Else StuXBM.Value=True End If End IfEnd Sub,11.4.4 学生信息修改,“删除”Click事件处理代码从StuADO记录集中取出当前记录的学号,然后通过commad对象执行delete语句来删除当前的学生记录,delete语句的调用会引起CheckXs触发器的动作。Private Sub StuDel_Click(Index As Integer)Ret=MsgBox(是否要删除+StuADO.Recordset(XH)+号学生的记录!,vbYesNo,提示)If Ret=vbYes Then SqlCmd.ActiveConnection=SqlCon SqlCmd.CommandText=delete from XS where XH=+StuADO.Recordset(XH)+SqlCmd.Execute StuADO.RecordSource=select*from XS,CXB where XS.XB=CXB.XB StuADO.Refresh End IfEnd Sub,11.4.4 学生信息修改,“照片”Double Click事件的处理代码打开对话框,给用户选择照片,并显示在StuPic控件中,同时记录下选择的文件名和路径到全局FileName变量中,给后面的更新学生信息使用。Private Sub StuPic_DblClick()显示打开文件的公用对话框,选择需要加入数据库的图片CDlg.Filter=位图(*.bmp)|*.bmp|图像(*.jpg)|*.jpgCDlg.ShowOpenFileName=CDlg.FileNameStuPic.Picture=LoadPicture(FileName)预览图片End Sub 读取照片数据的函数代码根据输入的照片的文件名,打开文件读入照片数据到数组中,然后通过AppendChunk函数把照片数据写入到Field对象中去。“更新”Click事件处理代码 先查询当前学号的学生信息,有当前学生的信息则修改相应的记录字段,调用PicSaveToDB保存选择的照片到记录集中的“ZP”字段,更新记录集到数据库中去。没有则通过AddNew新增一条记录,然后修改相应的记录字段,并更新记录集到数据库中去,这里在调用PicSaveToDB前先要判断FileName中是否选择了照片,有才保存到数据库中去。,11.4.5 学生成绩的录入,目的要求:了解VB中调用SQL Server存储过程的基本方法。Parameter参数对象的使用,视图的使用,触发器的使用。程序接口:程序接口如图11.30所示。,图11.30 程序接口,11.4.5 学生成绩的录入,主要功能:用户可以选择专业,这时会列出本专业所有的学生学号,选择课程,这时下面的DataGrid中会显示相应课程的学生的成绩和学分,可以在DataGrid中输入学生成绩,修改单个学生成绩,学分不允许修改,输入成绩,触发器会自动添加相应的学分。创建过程:参照上面学生信息修改窗口,姓名和学分Enable=FALSE