数据库 - 实验五 - 报告

更新时间: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管理,既有利于集中控制,又能够方便地进行维护。当用户规则发生变化时只要修改存储过程,无须修改其他应用程序。

本文来源:https://www.bwwdw.com/article/yue.html

Top