大数据库系统开发实验三

合集下载

《数据库原理与应用》实验报告三及答案

《数据库原理与应用》实验报告三及答案
@screditas'所选学分'
结果:
警告:聚合或其他SET操作消除了Null值。
学生号选课门数平均分所选学分
--------- ----------- ---------------------- -----------
081220101 669 22
(1行受影响)
4、思考题
1)存储过程和触发器的异同点?
二、实验环境及相关情况(包含使用软件、实验设备、主要仪器及材料等)
1、计算机操作系统要求在windows XP以上。
2、并要求SQL Server软件2000以后版本。
三、实验内容及要求
利用实验指导书中的关系数据库完成下面题目:
1、说明下面代码段的功能
LE (SELECT____avg________(NormalMark) FROMstudent_course)<80
BEGIN
if (SELECT MAX(NormalMark) FROMstudent_course)>____95_____
BREAK
ELSE
___UPDATE student_course
case trank
when‘教授’then‘高级职称’
when‘讲师’then‘中级职称’
else
‘初级职称’
end
from teacher
答:在教师表中选取姓名和性别两列,并给每个教师分等级;
2、完成下面代码的书写
计算student_course表的平时分数列的平均值。如果小于80,则分数增加其值的5%;如果分数的最高值超过95,则终止该操作。在以下代码划线处填入适当的内容以完成上述功能。
SET NormalMark = NormalMark *1.05

实验三 数据库查询

实验三 数据库查询
2、当在两表中建立查询时,一定要注意要通过两表共有的字段进行连接。
12、在“学生成绩表”中列出已登记成绩的学生个数;
13、在学生成绩表中,显示所有学生记录,按照平时成绩和期末成绩降序排列;
四、分析与讨论
通过本次实验,基本掌握了数据的一些基本查询,可以对单表的简单查询和复杂查询,两表的连接查询和嵌套查询等等,在实验中要注意一下几点:
1、在写查询语句时,要注意查询的属性名称要与原表中的属性名称要一样,否则会出现错误,导致无法查询;
2、编写select语句,显示“课程信息表”中的所有字段;
3、在学生档案表中,显示“XXXX.XX.XX”的格式显示出生日期。
4、在学生档案表中查询所有湖北学生的基本信息;
5、在教学任务表中列出所有任课教师ID,将重复的记录去掉;
6、在学生档案表中列出所有学生籍贯,将重复的记录去掉;
7、在学生成绩表中,显示学生所有记录,并期末成绩降序排列;
实验内容三
实验序号:三 实验项目名称:数据库查询Βιβλιοθήκη 实验地点指导教师李晖
实验时间
一、实验目的及要求
熟练掌握SQL SELECT语句,能够运用该语句完成各种查询。
二、实验设备(环境)及要求
台式机、SQLServer2005
三、实验内容与步骤
1、编写select语句,显示“教师档案表”中的姓名、性别、职称、单位字段:
8、在学生成绩表中,求平时成绩的最大值、最小值、平均值;
9、将学生成绩表中所有期末成绩大于80分的学生的学号、课程ID、平时成绩和期末成绩的查询结果输出到“优等生成绩表”的新建表中,然后对“优等生成绩表”进行查询。
10、列出所有女教师的ID、姓名以及所带课程;
11、查询北京学生的学号、课程ID和选课类别;

数据库实验报告(通用3篇)

数据库实验报告(通用3篇)

数据库实验报告(通用3篇)数据库试验报告篇1一、实训时间:20_年5月13日至5月24日二、实训地点:三、实训目的与意义:1,这次实习可以使我们在课本上学到的学问用于实践增加了我对电脑技巧的一些认知。

2,通过这次实习也可以让我体验到上班族的生活为我将来毕业后找工作打下了基础。

3,并且这次实习可以非常好的关心我完成将来的毕业论文。

四、实训感悟:还依旧记得来的第一天对这里很茫然,不知道实习要做些什么。

然后经过老师的急躁讲解,熟悉了自己实习要做些什么,得到了许多心理熟悉,对许多问题都有了一些更深的了解。

同时,我熟识了河北玛世电子商务有限公司,总部位于国家命名的“中国丝网之乡”、“中国丝网产业基地”、中国丝网产销基地“、”中国丝网出口基地“—河北省安平县。

使我们队公司有了更进一步的了解实习,就是在实践中学习。

经过这半个月的实习训练,我了解到自己所学的如何在实践中运用。

当然学的更多的是如何在更新网站内容和添加商品,每天不厌其烦的更新添加,观察自己的胜利更多的是兴奋。

还有发布了一些关于公司产品的博客,比如新浪,网易。

而后又尝试在百度知道上提问与回答,在回答问题的过程中,通过网站搜寻相关内容来回答各种丝网问题,通过百度知道这个平台,我对公司又了更一步的了解。

经过半个月的实训我学到了许多之前没有学过没有接触到的东西,熟悉到自己的不足,需要更加努力,才能尽快的学会在社会上生活,敢于面对社会的压力,使自己可以在社会上成长进展。

数据库试验报告篇2由于平常接触的都是一些私人项目,这些项目大都是一些类库,其他人的沟通相对可以忽视不计,因此也就不考虑规范化的文档。

实际上从学习的经受来看,我们接触的学问体系都是属于比较老或比较传统的,与现在进展快速的IT行业相比许多状况已不再适用,尤其是当开源模式渐渐走近开发者后更是如此。

虽然这次是一个数据库课程设计,由于本人在选择项目的时候是本着对自己有实际应用价值的角度考虑的,所以其中也涉及到一些数据库以外的设计。

数据库原理实验报告(数据查询)

数据库原理实验报告(数据查询)

数据库原理实验报告实验三数据查询班级:×××姓名:×××学号:×××数据查询一、[实验目的]1.掌握SQL的单表查询操作2.掌握SQL的连接查询操作3.掌握SQL的嵌套查询操作4.掌握SQL的集合查询操作二、[实验内容]本实验的主要内容是:1.简单查询操作。

包括投影、选择条件表达,数据排序,使用临时表等。

2.连接查询操作。

包括等值连接、自然连接、求笛卡儿积、一般连接、外连接、内连接、左连接、右连接和自连接等。

3.在SQL Server查询分析器中,使用IN、比较符、ANY或ALL和EXISTS操作符进行嵌套查询操作。

4.组合查询与统计查询。

(1)分组查询实验。

该实验包括分组条件表达、选择组条件的表达方法。

(2)使用函数查询的实验。

该实验包括统计函数和分组统计函数的使用方法。

(3)组合查询实验。

(4)计算和分组计算查询的实验。

三、[实验方法]1.将查询需求用Transact-SQL语言表示。

2.在SQL Server查询分析器的输入区中输入Transact-SQL查询语句。

3.设置查询分析器结果区为Standard Execute(标准执行)或Execute to Grid方式。

4.发布执行命令,查看查询结果;如果结果不正确,进行修改,直到正确为止。

5查询分析器的主要作用是编辑Transact-SQL,将其发送到服务器,并将执行结果及分析显示出来(或进行存储)。

查询分析功能主要是通过测试查询成本,判断该查询是否需要增加索引以提高查询速度,并可以实现自动建立索引的功能。

图5- 错误!未定义书签。

SQL Server 2000查询分析器查询分析器的界面如图5- 错误!未定义书签。

所示。

在查询生成器中的左边窗口是对象浏览器,其中按树结构列出了数据库对象;右上方是SQL代码区域,用于输入SQL的查询语句;右下方为结果区,用于显示查询结果和分析结果。

数据库原理及应用实验指导书答案

数据库原理及应用实验指导书答案

数据库原理及应用实验指导书 - 答案实验一:数据库管理系统的安装与配置问题一数据库管理系统(DBMS)是一种软件,用于管理和组织数据库。

它允许用户创建,读取,更新和删除数据库中的数据。

常见的数据库管理系统有MySQL,Oracle,SQL Server等。

问题二在实验室环境中,我们将使用MySQL作为我们的数据库管理系统。

以下是MySQL的一些常见特点: - 开源免费 - 跨平台支持 - 可扩展性强 - 有大型的用户社区和丰富的资源支持问题三MySQL的安装步骤如下: 1. 下载MySQL安装文件,可以从MySQL官方网站或者其他可信的下载源获取。

2. 运行安装程序,按照向导的指示进行安装。

3. 选择是否要安装MySQL 服务器和MySQL工具。

4. 设置密码以保护数据库的安全。

5. 完成安装程序并启动MySQL服务。

数据库是一个组织和存储数据的容器。

在关系型数据库中,数据以表的形式存储,每个表包含多个行和列。

每行代表一个记录,每列代表一个字段。

问题五关系型数据库管理系统(RDBMS)是一种DBMS,它使用结构化查询语言(SQL)来操作和处理数据。

常见的关系型数据库管理系统有MySQL,Oracle,SQL Server等。

问题六开放数据库连接(ODBC)是一种标准的数据库访问方法,它允许不同的应用程序通过统一的接口访问不同的数据库管理系统。

ODBC驱动程序充当应用程序和数据库之间的翻译器。

问题七在Windows系统中,ODBC数据源可以通过控制面板的“管理工具”来配置。

在数据源配置对话框中,可以添加,编辑和删除ODBC数据源。

在Windows系统中,可以使用ODBC接口库和ODBC驱动程序来连接和操作数据库。

具体步骤如下: 1. 加载ODBC接口库。

2. 初始化ODBC环境。

3. 建立数据库连接。

4. 执行SQL语句。

5. 关闭数据库连接。

6. 释放ODBC环境。

问题九ODBC接口库是一组API函数,用于连接和操作数据库。

数据库实验报告

数据库实验报告

数据库实验报告《数据库系统概论》实验指导书2012-8-30⽬录实验⼀数据库服务器的连接及数据库的建⽴ (1)实验⼆简单SQL查询及数据库多表查询 (12)实验三视图、索引、存储过程和触发器的使⽤ .. 22实验四 E-R模型与关系模型的转换 (30)实验五维护数据的完整性(选做)错误!未定义书签。

实验六事务管理(课后选做)错误!未定义书签。

实验七数据库的备份与恢复(课后选做)错误!未定义书签。

实验⼀数据库服务器的连接及数据库的建⽴⼀、实验⽬的:了解连接数据库服务器的⾝份验证模式,熟悉样例数据库。

掌握DBMS中利⽤界⾯进⾏建库建表操作。

⼆、实验准备:数据模型由三个要素组成:数据结构、数据操作和完整性约束。

1、数据结构数据结构⽤于描述系统的静态特性,是所研究的对象类型的集合。

数据模型按其数据结构分为层次模型、⽹状模型和关系模型。

2、数据操作数据操作⽤于描述系统的动态特性,是指对数据库中各种对象的实例允许执⾏的操作的集合,包括操作及有关的操作集合。

3、数据的约束条件数据的约束条件是⼀组完整性规则的集合。

完整性规则是给定的数据及其联系所具有的制约和存储规则,⽤以限定符合数据库状态以及状态的变化,以保证数据的正确、有效和相容。

数据库系统的三级模式结构数据库系统的三级模式结构是指数据库系统是由外模式、模式和内模式三级组成。

1、外模式。

外模式也称⼦模式或⽤户模式,它是数据库⽤户(包括应⽤程序员和最终⽤户)看见和使⽤的局部数据的逻辑结构和特征的描述,是数据库⽤户的数据视图,是与某⼀应⽤有关的数据的逻辑表⽰。

⼀个数据库可以有多个外模式。

2、模式。

模式也称逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有⽤户的公⽤数据视图。

⼀个数据库只有⼀个模式。

3、内模式。

内模式也称存储模式,它是数据物理和存储结构的描述,是数据在数据库内部的表⽰⽅式。

⼀个数据库只有⼀个内模式。

DBMS的功能1、数据定义数据定义包括定义构成数据库结构的外模式、模式和内模式,定义各个外模式与模式之间的映射,定义模式与内模式之间的映射,定义有关的约束条件(例如,为保证数据库中数据具有正确语义⽽定义的完整性规则,为保证数据库安全⽽定义的⽤户⼝令和存取权限等)。

数据库系统实验

数据库系统实验

梁文娟目录实验1 用E-R图设计数据库 (3)实验2 熟悉SQL Server 2000环境 (4)实验3 创建数据库及表 (19)实验4 数据查询 (34)实验5 视图的定义和操作 (36)实验6 实现数据完整性 (38)实验7 实现数据库安全管理 (41)实验8 实现触发器 (45)实验9 数据库备份与恢复 (47)实验10 数据库设计综合应用 (48)实验1 用E-R图设计数据库实验目的与要求:1.掌握E-R模型的基本概念和图形的表示方法。

2.掌握将现实世界的事物转化成E-R图的基本技巧3.熟悉关系数据模型的基本概念。

4.掌握E-R图转化成关系表的基本方法实验环境:1.Windows 2000/XP2.SQL Server 2000实验内容:1.根据需求确定实体、属性和联系。

2.将实体、属性和联系转化为E-R图。

3.将E-R图转化为表。

实验步骤:1.设计能够表示学生、课程关系的数据库。

1)确定学生、课程实体的属性。

2)确定学生、课程实体的联系以及联系类型。

3)画出学生、课程关系的E-R图。

2.设计能够表示商品、顾客和商品生产厂家关系的数据库。

1)确定商品、顾客和商品生产厂家实体的属性。

2)确定商品、顾客和商品生产厂家的联系以及联系类型。

3)画出商品、顾客和商品生产厂家关系的E-R图。

讨论:E-R图和关系表之间的关系。

实验2 熟悉SQL Server 2000环境一、实验目的●掌握SQL Server 2000的安装●了解SQL Server 2000的组织结构和操作环境●熟悉SQL Server 2000的基本使用方法二、背景知识SQL Server 2000是Microsoft公司推出的高性能的客户端/服务器结构的关系数据库管理系统,它继承了SQL Server 7.0版本的高性能、可靠性、易用性和可扩充性的优点,同时又增加了一些新的特性,使其成为一种领先的数据库管理系统,可用于联机事务处理(OLTP)、数据仓库及电子商务等。

实验三对数据库表插入数据

实验三对数据库表插入数据

实验三对数据库表插入数据一、实验目的及要求1.学会在企业管理器中对表进行插入、修改和删除数据操作。

2.学会使用T-SQL语句对表进行插入、修改和删除数据操作。

3.了解T-SQL语句对表数据库操作的灵活控制功能。

二、实验内容:1.SQL数据定义语句:1-1:(修改数据库表) 在student表中增加SSEX(C,2) 字段。

1-2:(建立索引) 为score表按学号升序和课程号降序分别建立索引,索引名分别为SC_NDXSNO和SC_NDXCNO。

为Score表按分数降序建立索引,索引名为GRADE_NDX。

1-3:(删除索引) 删除索引SC_NDX_SNO。

2.SQL数据操纵语句:2-1:(插入数据) 按实验二各表中的数据(见实验数据)分别插入到教学数据库的四个数据库表中。

2-2:(修改数据) 将S1表中所有学生的年龄加2。

2-3:(修改数据) 将course表中‘程序设计’课时数修改成与‘数据结构’的课时数相同。

2-4:(插入数据) 向score表中插入数据(‘05001’, ‘001’, 95),根据返回信息解释其原因。

2-5:(删除数据) 删除Score表中学号为‘04001’的成绩信息,根据返回信息解释其原因。

三、实验编程结果或过程(本次实验未采用截图的方式显示操作过程,而是直接将涉及的数据显示在以下蓝色字体中)1.SQL数据定义语句:1-1:(修改数据库表) 在student表中增加SSEX(C,2) 字段。

ALTER TABLE student ADD ssex char(2);1-2:(建立索引) 为score表按学号升序和课程号降序分别建立索引,索引名分别为SC_NDXSNO和SC_NDXCNO。

为Score表按分数降序建立索引,索引名为GRADE_NDX。

CREATE UNIQUE INDEX SC_NDXSNO on score (sno asc);CREATE UNIQUE INDEX SC_NDXCNO on score (cno desc);CREATE UNIQUE INDEX RADE_NDX on score (score desc);1-3:(删除索引) 删除索引SC_NDXSNO。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验报告:学号:班级:实验:订单管理时间: 2017年9月28日目录一、实验目的(通过实验要达到什么样的效果,学到什么东西)二、实验条件(实验使用软件)三、实验容(实验需要做的具体详细的实验项目)四、实验要求(实验中,我们要注意的实验事项和写实验报告的详细要求)五、实验步骤(实验步骤包括具体的每个实验的实验方法、实验结果和实验结果分析,按照每步遇到的问题,进行分析解决)六、实验感悟(总结实验中遇到的问题,以后该怎么解决)学习数据库应用程序的开发和实现部分功能(查询、插入、删除、更新和保存等)二、实验条件Microsoft SQL Server Management StudioMicrosoft Visual StudioWindows 8C#编程语言三、实验容编程实现示例数据库中订单明细SalesOrderDetail的查询、插入、更新与删除功能如下:(1)查询功能。

程序运行后,订单表中显示所有订单,第一个订单为当前订单,订单明细表中显示当前订单的所有订单明细。

当前订单发生改变时(即点击订单表中的某个订单埋),订单明细表中的容发生相应的变化。

(2)删除功能:选取订单明细中的一行,点击删除,选择的订单明细从表中删除,但并不真正从数据库中删除。

(3)插入功能:可以在订单明细表的最后输入新的订单明细。

(4)更新功能:可以修改订单明细表中的某一行的容。

如果输入的单价(UnitPrice)大于产品的公开报价,则提示相应的信息(利用4.6.2的触发器完成此功能)。

(5)保存功能:点击保存按钮时,将订单明细保存到数据库。

(6)关闭功能:点击关闭按钮时,如果订单明细有修改但没有保存,则提示是否关闭,如果不关闭则返回,否则关闭程序,如果没有修改,则直接关闭。

四、实验要求1.订单查询实验要求使用并任选一种程序设计语言进行编程。

实验报告需要说明所采用的方法、结果和总结(结果分析)。

实验方法部分说明采用的开发环境,包括操作系统、数据库管理系统及其版本、编程工具及其版本、和编程语言。

如果使用则在实验方法部分回答下面的问题:(1)使用哪种数据提供程序?(2)使用的数据连接对象是哪一个?连接对象是如何建立的?最后生成的连接对象中的连接字符串是什么?代表什么含义?(3)使用的数据适配器对象是什么?其中的查询或更新语句是什么?如果有参数则参数是如何处理的?(4)使用的数据集对象是什么?数据集中有哪些数据表?数据表是由哪些适配器对象生成的?(或采用其它方法)。

实验方法中还需要给出手工添加的代码及对代码的说明。

实验结果部分给出程序运行的界面和操作的简单说明。

总结部分对实验过程中出现的总是进行分析,同时提出所开发的程序还有哪些可以改进的地方。

实验方法:回答实验要求中的实验问题(1)使用哪种数据提供程序?答:OLEDB类数据。

(2)使用的数据连接对象是哪一个?连接对象是如何建立的?最后生成的连接对象中的连接字符串是什么?代表什么含义?答:连接对象oleDbConnection1数据适配器:oleDbDataAdapter1和oleDbDataAdapter2oleDbDataAdapter1Provider=SQLNCLI11(客户端组件,代表一个驱动)Data Source=LENOVO-PC(代表数据源是LENOVO-PC)Security=SSPI(代表以window用户登录服务器)Initial Catlog=AdventureWorks(代表连接数据库为AdventureWorks) oleDbDataAdapter2Provider=SQLNCLI11(客户端组件,代表一个驱动)Data Source=LENOVO-PC(代表数据源是LENOVO-PC)Security=SSPI(代表以window用户登录服务器)Initial Catlog=AdventureWorks(代表连接数据库为AdventureWorks)(3)使用的数据适配器对象是什么?其中的查询或更新语句是什么?如果有参数则参数是如何处理的?答:oleDbDataAdapter1:1)查询语句:SELECT SalesOrderID, OrderDate, DueDate, ShipDate, Status, SalesOrderNumberFROM Sales.SalesOrderHeader2)没有参数OleDbDataAdapter2:1)查询语句:SELECT SalesOrderID, SalesOrderDetailID, CarrierTrackingNumber, OrderQty, ProductID, SpecialOfferID, UnitPrice,UnitPriceDiscount, LineTotal, rowguid, ModifiedDate FROM Sales.SalesOrderDetail2)没有参数(4)使用的数据集对象是什么?数据集中有哪些数据表?数据表是由哪些适配器对象生成的?(或采用其它方法)。

答:dataSet11->SalesOrderHeader表->oleDbDataAdapter1dataSet21->SalesOrderDetail表->oleDbDataAdapter21.基本框架设计介绍1.1新建一个项目客户管理4.0,选择的参数如下1.2打开新建的项目客户管理4.01.3窗口进行如下图所示的设计订单:使用dataGridView创建,名字设置为dataGridView1Datasource:dataSet11Datamember:SalesOrderHeader订单明细:使用datagridview创建,名字设置为dataGridView2 Datasource:dataSet21Datamember:SalesOrderDetailoleDbConnection1:连接数据库AdventureWorksoleDbDataAdapter1->dataSet11oleDbDataAdapter2->dataSet21填充dataGrid控件:dataGridView1和dataGridView2private void Form1_Load(object sender, EventArgs e){oleDbDataAdapter1.Fill(dataSet11);oleDbDataAdapter2.Fill(dataSet21);}1.4数据库环境设置连接SQL Server中的默认数据库AdventureWorks2.查询功能的实现2.1实现功能代码private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) {string msg = dataGridView1[e.ColumnIndex, e.RowIndex].Value.ToString();String strCustomerDelete = "Select * FROM Sales.SalesOrderDetail WHERESalesOrderID =" + msg;Console.Write(strCustomerDelete);mandText = strCustomerDelete;t his.dataSet21.Clear(); //刷新this.oleDbDataAdapter2.Fill(this.dataSet21); //填充}2.2查询SalesOrderID=43661的所有订单明细3.删除功能的实现3.1实现功能代码3.2如图删除SalesOrderID=43661,SalesOrderDetailID=15的订单,结果如下点击43661后查询结果如下选择43661中SalesOrderDetailID=15的一行并点击删除按钮,则删除这行数据,如下图所示:4.插入功能的实现4.1实验指导书中已经给出介绍,SalesOrderDetail的rowguid列是一个uniqueidentifier 类型,不允许空值。

手工输入该值比较困难,可以使用程序进行处理。

即手工输入时不输入该值,保存到数据库之前由程序生成该列的值。

4.2如下图在SalesOrderID=43661的订单明细的最下方添加一行新的订单没有插入新的订单之前的位置插入如图所示的新订单信息5.更新功能的实现5.1在AdventureWorks数据库中创建表Production.ProductUpdateLog,用来记录订单编号、订单明细编号、产品编号、产品的公开报价、修改前产品的单价、修改后产品的单价、修改者的登录名SQL语句如下:CREATE TABLE Production.ProductUpdateLog(记录编号int IDENTITY PRIMARY key, ---保证编号唯一,且随插入数据的数据逐一递增订单编号int not null,订单明细编号int not null,产品编号int not null,产品的公开报价money,修改前产品的单价money,修改后产品的单价money,修改者的登录名varchar(30)not null)GO创建的表如下图所示:5.2 创建名为Product.ProductUpdateCheck的存储过程,来向表Production.productUpdateLog中插入数据,实现代码如下USE AdventureWorksGOIF OBJECT_ID('Production.Record_Update_Price','P')IS NOT NULLDROP PROCEDURE Production.Record_Update_PriceGO--如果数据库中存在名称为Production.Record_Update_Price的存储过程--则删除该存储过程--创建存储过程Production.Record_Update_Price,它有个参数,--其中SalesorderID 表示订单编号,SalesorderdetailID 表示订单明细编号--ProductID 表示产品编号,PublicPrice 表示公开报价--PrePrice 表示修改前价格,PostPrice 表示修改后报价--Operator 表示修改者登录名CREATE PROCEDURE Production.Record_Update_Price--RecordID int,--因为表格ProductUpdateLog的主键设为IDENTITY性质,不用传参SalesorderID int,SalesorderdetailID int, ProductID int,PublicPrice money, PrePrice money,PostPrice money, Operator nvarchar(50)AS--向表ProductUpdateLog插入一条记录,参数纷纷对应INSERT INTO Production.ProductUpdateLog(--记录编号,订单编号,订单明细编号, 产品编号,产品公开报价, 修改前产品单价,修改后产品单价, 修改者登录名)VALUES(--RecordID,SalesorderID,SalesorderdetailID, ProductID,PublicPrice, PrePrice,PostPrice, Operator)GOUSE AdventureWorksGOIF OBJECT_ID('Production.Record_Update_Price','P')IS NOT NULL DROP PROCEDURE Production.Record_Update_PriceGO--如果数据库中存在名称为Production.Record_Update_Price的存储过程--则删除该存储过程--创建存储过程Production.Record_Update_Price,它有个参数,--其中SalesorderID 表示订单编号,SalesorderdetailID 表示订单明细编号--ProductID 表示产品编号,PublicPrice 表示公开报价--PrePrice 表示修改前价格,PostPrice 表示修改后报价--Operator 表示修改者登录名CREATE PROCEDURE Production.Record_Update_Price--RecordID int,--因为表格ProductUpdateLog的主键设为IDENTITY性质,不用传参SalesorderID int,SalesorderdetailID int, ProductID int,PublicPrice money, PrePrice money,PostPrice money, Operator nvarchar(50)AS--向表ProductUpdateLog插入一条记录,参数纷纷对应INSERT INTO Production.ProductUpdateLog(--记录编号,订单编号,订单明细编号, 产品编号,产品公开报价, 修改前产品单价,修改后产品单价, 修改者登录名)VALUES(--RecordID,SalesorderID,SalesorderdetailID, ProductID,PublicPrice, PrePrice,PostPrice, Operator)GO5.3建立名为Sales.Price_Update的触发器实现代码如下:USE AdventureWorksGO--如果已经存在名为Sales.Price_Update的触发器,则删除它IF OBJECT_ID('Sales.Price_Update','TR')IS NOT NULLDROP TRIGGER Sales.Price_UpdateGO--在表Sales.SalesOrderDetail的Update操作上创建--Instead of触发器Sales.Price_UpdateCREATE TRIGGER Sales.Price_UpdateON Sales.SalesOrderDetailINSTEAD OF UpdateAS--当更新插入记录的更新价格UnitPrice大于--产品的公开报价Production.Product.ListPrice时--调用RAISERROR报错,进行操作回滚IF(EXISTS( SELECT I.UnitPriceFROM Production.Product P, inserted IWHERE I.UnitPrice > P.ListPrice AND P.ProductID = I.ProductID))BEGINRAISERROR('修改的产品单价不能大于产品的公开报价!', 10, 1) ROLLBACK TRANSACTIONEND--如果符合更新价格不大于公开报价的条件--则调用存储过程Production.Record_Update_PriceELSEBEGIN--声明相对应的个参数,数据类型一致对应DECLARE SalesorderID int,SalesorderdetailID int,ProductID int,ListPrice money,PreUnitPrice money,PostUnitPrice money,Operator nvarchar(50)--订单编号、订单明细编号、产品编号及产品修改后价格--皆取自表inserted相对应值SELECT SalesorderID = SalesOrderID,SalesorderdetailID = SalesOrderDetailID,ProductID = ProductID,PostUnitPrice = UnitPriceFROM inserted--产品公开报价取自表Production.Product的ListPriceSELECT ListPrice = ListPriceFROM Production.Product PWHERE P.ProductID = (SELECT ProductIDFROM inserted)--执行更新操作,将表Sales.SalesOrderDetail所对应的记录的--UnitPrice值更新UPDATE Sales.SalesOrderDetailSET UnitPrice = PostUnitPriceWHERE Sales.SalesOrderDetail.SalesOrderID = SalesorderIDAND Sales.SalesOrderDetail.SalesOrderDetailID = SalesorderdetailID--修改前的产品价格取自表中deleted--表Sales.SalesOrderDetail对应被删除的记录UnitPriceSELECT PreUnitPrice = UnitPriceFROM deleted DWHERE D.ProductID =(SELECT ProductIDFROM inserted)--获取当前修改者登录名--在网上搜到了这个系统置函数SELECT Operator = SYSTEM_USER--将个参数对应位置传入存储过程Production.Record_Update_PriceEXECUTE Production.Record_Update_Price SalesorderID,SalesorderdetailID,ProductID, ListPrice,PreUnitPrice, PostUnitPrice,Operator--提示已经进入存储过程PRINT 'HERE COMES A PROCEDURE...'ENDGO创建的触发器如下图所示:5.4在订单明细中修改一行中的一个数据,如输入的单价(UnitPrice)不符合产品的公开报价围时,窗口会出现提示,并组织修改的保存6.保存功能的实现6.1保存功能实现代码private void button2_Click(object sender, EventArgs e){try{// 检查数据表各行,设置新行的rowguid列foreach (DataRow dataRow in this.dataSet21.SalesOrderDetail.Rows){// 如果是新行if (dataRow.RowState == DataRowState.Added){// 如果rowguid列的值是空值if (dataRow["rowguid"].Equals(System.DBNull.Value)){dataRow["rowguid"] = Guid.NewGuid();}}}this.oleDbDataAdapter2.Update(this.dataSet21.SalesOrderDetail);MessageBox.Show("保存成功!");}catch (Exception ex){MessageBox.Show("保存失败!\n" + ex.Message);}}6.2功能实现结果如下图,把SalesOrderID=43863&SalesOrderDetailID=671的D0C0-435D-A2修改成D0C0-435D-B2修改后点击保存按钮,结果如图所示再次查询这个SalesOrderID=43863&SalesOrderDetailID=671的订单明细,可以看到已经保存到数据库了7.关闭功能的实现7.1关闭功能实现代码private void button3_Click(object sender, EventArgs e){bool Save_Flag = true;//定义一个波尔变量save_flagfor (int i = 0; i < this.dataSet21.SalesOrderDetail.Rows.Count; i++)//全局扫描,判断是否有修改if (this.dataSet21.SalesOrderDetail.Rows[i].RowState !=DataRowState.Unchanged){Save_Flag = false;break;}if (Save_Flag == false){if(DialogResult.Yes == MessageBox.Show(" 是否要保存对订单明细的更改?", "提示", MessageBoxButtons.YesNo))//若确定则关闭窗口不保存更改数据,否则回到原来窗口this.Close();}else //若没有更改则直接关闭this.Close();}7.2关闭功能实现结果若不更改任何数据或者已经点击保存按钮,则窗口直接关闭若更改数据而没有点击保存按钮,则会弹出提示窗口,提示你订单明细已经更改,是否确认退出若点否,则回到原来的订单表窗口中若点击是,则不保存到数据库并且关闭窗口再次运行程序,查看SalesOrderID=43659&SalesOrderDetailID=4的订单是否已经保存,结果如下:很明显没有保存实验结果:实验中六个基本功能如查询、插入、删除、保存、更新和关闭已经实现了,可以通过对订单中的某个订单进行所有历史订单的查询,并通过订单明细窗口把所以信息显示出来;可以对订单明细最后一行进行插入一行新的订单数据;可以在订单明细表中选择一行数据点击删除按钮,把那行订单数据一整行删除;可以对更改的数据进行处理并保存到数据库;可以更新功能,如若是输入单价超出规定的报价,则会报错,无法进行保存;可以关闭窗口,若是订单明细的数据已经更改而没有保存,则会弹出窗口提示“订单明细更改,是否确认退出”,若是已经保存或者是没有更改订单明细的数据,而可以直接关闭窗口不会出现提示窗口。

相关文档
最新文档