实 验 五 存储过程建立与调用
一.实验目的:
理解并掌握利用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(); } } 第四步:进入主界面后设计如下: 主界面: