数据库 - 实验五 - 报告
更新时间:2024-07-05 18:35:01 阅读量: 综合文库 文档下载
- 数据库推荐度:
- 相关推荐
实 验 五 存储过程建立与调用
一.实验目的:
理解并掌握利用SQL Server 数据库库服务器的存储过程的建立与调用,并理解概念。能够熟悉用数据库一种开发平台进行存储过程的调用。
二.实验属性:
设计性。
三.实验仪器设备及器材:
装有.net、Java和Delphi 7和SQL Server的电脑。
四.实验要求
1、利用存储过程,给student表添加一条学生信息。
2、利用存储过程从student、course、sc表的连接中返回所有学生的学号、姓名、所选课程及成绩。 3、 用存储过程查找“刘刚”的学号、所选课程、成绩。
4、 用存储过程查找姓“李”并且性别为“男”的学生的学号、所选课程、成绩。 5、 利用存储过程计算出平均成绩大于k分(0 以上要求需要与.net和Delphi开发平台结合,调用所建立的存储过程,将结果显示出来,可以在一个工程里完成,也可以在多个工程里完成。 6. 提交实验报告要分别进行叙述。 提示: 一、在Delphi开发平台下,要用到TADOstoredPro, TADOConnection, TADOQuery, TdataSource, TDBGrid 等技术。 二、在 . net编译环境下,需要用到: SQLConnection(或者OleDbConnection,或者OdbcConnection); SQLCommand(或者OleDbCommand,或者OdbcCommand); SqlDataReader(或者OleDbDataReader,或者OdbcDataReader); DataSet; dataGridView(可视控件,用于显示数据) 五、试验过程 第一步:在数据库中建立相关的存储过程,其SQL代码如下所示: 1、 建立存储过程,完成给学生Student表添加一条学生信息 CREATE PROCEDURE ADD_STUDENTINFO @no VARCHAR(12), @name VARCHAR(10), @sex VARCHAR(4), @age int, @dept VARCHAR(16) AS INSERT INTO Student VALUES(@no,@name,@sex,@age,@dept) 2、 建立存储过程,完成从student、course、sc表的连接中返回所有学生 的学号、姓名、所选课程及成绩。 CREATE PROCEDURE SHOW_INFO AS SELECT Student.Sno,Sname,Cname,Grade FROM Student,SC,Course WHERE Student.Sno=SC.Sno AND SC.Cno=Course.Cno 3、 建立存储过程,完成查找“刘波”的学号、所选课程、成绩。 CREATE PROCEDURE SHOW_LIUBOINFO AS SELECT Student.Sno,Sname,Cname,Grade FROM Student,SC,Course WHERE Student.Sno=SC.Sno AND SC.Cno=Course.Cno AND Sname='刘波' 4、 建立存储过程,完成查找姓“李”并且性别为“男”的学生的学号、所 选课程、成绩。 CREATE PROCEDURE SHOWL @s VARCHAR(2) AS SELECT Student.Sno,Sname,Cname,Grade FROM Student,SC,Course WHERE Student.Sno=SC.Sno AND SC.Cno=Course.Cno AND Sname LIKE @s+'%' AND Ssex='男' 5、 建立存储过程,完成计算出平均成绩大于k分(0 姓名。 CREATE PROCEDURE SHOW_K @k int AS SELECT Sno,Sname FROM Student WHERE EXISTS ( SELECT * FROM SC WHERE SC.Sno=Student.Sno GROUP BY Sno HAVING AVG(Grade)>@k ) 第二步:建立相应的C#工程,在其中定义用于数据库操作的类: 该类可以进行与数据库的连接,实现最基本的显示。 public class LinkDataBase { private SqlConnection myconnection = new SqlConnection(); private SqlCommand mycmd = new SqlCommand(); public LinkDataBase() { mycmd.Connection = myconnection; } public SqlConnection pconnection { get { return myconnection; } set { myconnection = value; } } public SqlCommand pcmd { get { return mycmd; } set { mycmd = value; } } public string Link() { string str = ConfigurationManager.ConnectionStrings[\].ConnectionString.ToString(); myconnection.ConnectionString = str; try { myconnection.Open(); } catch (Exception ex) { MessageBox.Show(ex.Message.ToString(), \提示\); return \连接失败\; } return \连接成功\; } public void Show(DataGridView dview) { SqlDataAdapter Adapter = new SqlDataAdapter(); Adapter.SelectCommand = mycmd; DataSet myDS = new DataSet(); Adapter.Fill(myDS); dview.DataSource = myDS.Tables[0].DefaultView; } public bool login(string name, string password) { Exception ex = new Exception(); mycmd.CommandText = \; mycmd.Connection = myconnection; SqlDataReader myread = mycmd.ExecuteReader(); try { while (myread.Read()) { if (myread.GetValue(0).ToString().Trim() == name.ToString().Trim()) { if (myread.GetValue(1).ToString().Trim() == password.ToString().Trim()) { myread.Close(); myconnection.Close(); return true; } else { ex = new Exception(\姓名输入错误\); throw ex; } } } ex = new Exception(\学号输入有误\); throw ex; } catch (Exception Ex) { switch (Ex.Message) { case \姓名输入错误\: MessageBox.Show(\姓名输入有误\, \提示!\, MessageBoxButtons.OK); myread.Close(); myconnection.Close(); return false; case \学号输入有误\: MessageBox.Show(\学号输入有误\, \提示!\, MessageBoxButtons.OK); myread.Close(); myconnection.Close(); return false; default: myread.Close(); myconnection.Close(); return false; } } } } 第三步:登录的设置: 点击登录按钮相应如下函数: private void btnlogin_Click(object sender, EventArgs e) { if (textBox1.Text.Trim() == \ || textBox2.Text.Trim() == \) { MessageBox.Show(\不能为空\,\信息提示\); return; } if (ldb.Link() == \连接失败\) return; if (ldb.login(textBox1.Text.Trim(), textBox2.Text.Trim())) { this.Hide(); MainFrm f =new MainFrm(); f.ShowDialog(); this.Close(); } } 第四步:进入主界面后设计如下: 主界面: 在“给Student的表添加信息”的界面上点击确定按钮响应如下函数: private void btnSure_Click(object sender, EventArgs e) { if (textBox1.Text.Trim() == \ || textBox2.Text.Trim() == \ || textBox3.Text.Trim() == \ || textBox4.Text.Trim() == \ || textBox5.Text.Trim() == \) { MessageBox.Show(\不能为空\, \信息提示\); } else { Form1.ldb.pconnection.Open(); Form1.ldb.pcmd.CommandText = \; Form1.ldb.pcmd.CommandType = CommandType.StoredProcedure; Form1.ldb.pcmd.Parameters.Clear(); Form1.ldb.pcmd.Parameters.Add(\, SqlDbType.VarChar, 12).Value = textBox1.Text.Trim(); Form1.ldb.pcmd.Parameters.Add(\,SqlDbType.VarChar,10).Value= textBox2.Text.Trim(); Form1.ldb.pcmd.Parameters.Add(\,SqlDbType.VarChar,4).Value= textBox3.Text.Trim(); Form1.ldb.pcmd.Parameters.Add(\, SqlDbType.Int, 100).Value = textBox4.Text.Trim(); Form1.ldb.pcmd.Parameters.Add(\,SqlDbType.VarChar,16).Value= textBox5.Text.Trim(); Form1.ldb.pcmd.ExecuteNonQuery(); MessageBox.Show(\插入成功\); Form1.ldb.pconnection.Close(); } } 在“显示所有学生的选课情况”的界面上点击显示按钮响应如下函数: private void btnShow_Click(object sender, EventArgs e) { Form1.ldb.pconnection.Open(); Form1.ldb.pcmd.CommandText = \; Form1.ldb.pcmd.CommandType = CommandType.StoredProcedure; Form1.ldb.Show(dataGridView1); Form1.ldb.pconnection.Close(); } 在“查找刘波的信息”的界面上点击显示刘波的信息按钮响应如下函数: private void btnShowliugang_Click(object sender, EventArgs e) { Form1.ldb.pconnection.Open(); Form1.ldb.pcmd.CommandText = \; Form1.ldb.pcmd.CommandType = CommandType.StoredProcedure; Form1.ldb.Show(dataGridView2); Form1.ldb.pconnection.Close(); } 在“查找姓李的并且为男生学生信息”的界面上点击确定按钮响应如下函数: private void btn_Click(object sender, EventArgs e) { if (textBox6.Text.Trim() == \) { MessageBox.Show(\不能为空\, \信息提示\); return; } Form1.ldb.pconnection.Open(); Form1.ldb.pcmd.CommandText = \; Form1.ldb.pcmd.CommandType = CommandType.StoredProcedure; Form1.ldb.pcmd.Parameters.Clear(); Form1.ldb.pcmd.Parameters.Add(\,SqlDbType.VarChar,2).Value=textBox6.Text.Trim(); Form1.ldb.Show(dataGridView3); Form1.ldb.pconnection.Close(); ; } 在“平均成绩大于某个值的学生信息”的界面上点击确定按钮响应如下函数: private void button1_Click(object sender, EventArgs e) { if (textBox7.Text.Trim() == \) { MessageBox.Show(\不能为空\,\信息提示\); return; } Form1.ldb.pconnection.Open(); Form1.ldb.pcmd.CommandText = \; Form1.ldb.pcmd.CommandType=CommandType.StoredProcedure; Form1.ldb.pcmd.Parameters.Clear(); Form1.ldb.pcmd.Parameters.Add(\, SqlDbType.Int, 100).Value = textBox7.Text.Trim(); Form1.ldb.Show(dataGridView4); Form1.ldb.pconnection.Close(); } 第五步:测试: 测试的结果如下所示: 六、心得体会 通过这次的数据库实验,我懂得了如何建立存储过程,以及存储过程对于数据库编程的优越性,从中体会到了好的编程基础对于编程的重要性。从某种程度上说,数据库中存储过程是对数据库中应用SQL语句的一种优化。了解到的存储过程的优点有: 1、由于存储过程不像解释执行的SQL语句那样在提出操作请求时才进行语法分析和优化工作,因此运行效率高,它提供了在服务器端快速执行SQL语句的有效途径。 2、存储过程降低了客户机和服务器之间的通信质量。客户机上的应用程序只要通过网络向服务器发出存储过程的名字和参数,就可以让RDBMS执行许多条的SQL语句,并执行数据处理。只有最终处理结果才返回客户端。 3、方便实施企业规则。可以把企业规则的运算程序写成存储过程放入数据库服务器中,由RDBMS管理,既有利于集中控制,又能够方便地进行维护。当用户规则发生变化时只要修改存储过程,无须修改其他应用程序。
正在阅读:
数据库 - 实验五 - 报告07-05
汉中市蔬菜种植农场名录184家10-22
2015年铁路局招聘考试真题及答案解析06-02
画册封面设计的四个重要理念07-19
上海市(长宁、宝山、嘉定、青浦)四区2016届高三数学4月质量调研测试(二模)试题 文10-13
社会实践(国贸专业)07-08
计时器的发展与应用 - 图文11-13
《三国演义》阅读测试题及阅读答案04-21
我学会了珍惜作文800字07-04
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 实验
- 数据库
- 报告
- 中国民航大学线性代数期末考试试题
- 兰州大学学科带头人及其信息
- 贵州桐梓县乡村旅游资源开发对策研究
- 行政管理
- 北邮 大学英语3 第一阶段作业
- 《李逵负荆》教学设计(自己)
- 《如何规范农村三年级小学生汉字书写的研究》 胡恩勤
- 三国知识竞猜600题
- 小学校本课程开设与实施方案
- 2018-2019年北京版语文一年级上册1-6《g k h》教学反思
- 1099111130设计模式实验报告
- 重庆科技学院毕业设计格式 - 图文
- 北京古建筑计算规则
- 朱明清教授(1)
- 教师编制教育心理学简答题 整理
- 以生鲜食品为例的配送中心布局规划设计探讨
- 中国统治者列表(08)周朝次要诸侯国1与周边民族 - 图文
- SPMK3005热工仪表校验仪
- 2017招警考试公安基础知识:人民警察的录用
- 常州工学院会计学专业申报表 - 图文