您的位置:首页 > 数据库

数据库课程设计心得【3】---存储过程的运用

2010-12-19 14:58 288 查看
TextBox4.Text = Calendar1.SelectedDate.ToString();
        decimal iRet;
        //获取连接数据库的字符串并赋值给CM_ConnectionString
        string CM_ConnectionString = ConfigurationManager.ConnectionStrings["myDatabaseConnection"].ToString();
        //创建数据库连接
        SqlConnection CM_conn = new SqlConnection(CM_ConnectionString);
        //打开连接
        CM_conn.Open();
        //创建命令对象
        SqlCommand CM_cmd = new SqlCommand("borrow_classroom_2", CM_conn);
        //指定命令类型为存储过程
        CM_cmd.CommandType = CommandType.StoredProcedure;
        //添加参数学生学号
        CM_cmd.Parameters.Add("@Student_id", SqlDbType.VarChar, 50);
        CM_cmd.Parameters["@Student_id"].Value = TextBox1.Text;
        //添加参数:教学楼名称
        CM_cmd.Parameters.Add("@building_name", SqlDbType.VarChar, 50);
        CM_cmd.Parameters["@building_name"].Value = DropDownList2.SelectedValue.ToString();
        //添加参数:教室编号
        CM_cmd.Parameters.Add("@Classroom_id", SqlDbType.VarChar, 50);
        CM_cmd.Parameters["@Classroom_id"].Value = DropDownList3.SelectedValue.ToString();
        //添加参数:借用日期
        CM_cmd.Parameters.Add("@Date", SqlDbType.DateTime,50);
        CM_cmd.Parameters["@Date"].Value = TextBox4.Text;
        //添加参数:使用时段
        CM_cmd.Parameters.Add("@Period", SqlDbType.VarChar, 50);
        CM_cmd.Parameters["@Period"].Value = DropDownList1.SelectedValue.ToString();
        //添加参数:教室用途
        CM_cmd.Parameters.Add("@Fun", SqlDbType.VarChar, 50);
        CM_cmd.Parameters["@Fun"].Value = TextBox5.Text;
        //
        CM_cmd.Parameters.Add("@success", SqlDbType.Decimal);
        CM_cmd.Parameters["@success"].Direction = ParameterDirection.Output;
        //如果存储过程执行返回结果为1,则提示借用教室成功。
        try
        {
            CM_cmd.ExecuteNonQuery();
            iRet = (decimal)CM_cmd.Parameters["@success"].Value;
            if (iRet == 1)
            {
                Response.Write("<mce:script type="text/javascript"><!--
alert(/"借用成功/");
// --></mce:script>");
            }
        }
        catch (SqlException ex)
        {
            throw ex;
        }
        finally
        {
            CM_conn.Close();
            Calendar1.Visible = false;
        }




以上是,我在我的数据库课程设计中一个用到存储过程的地方,该存储过程完成学生借用教室的功能,后台代码如下:

-- =============================================
-- Author:    杜琪
-- Create date: 2010-12-04
-- =============================================
--编写存储过程完成学生借用教室的功能,如果申请的教室有冲突,请给出提示。
ALTER procedure[dbo].[borrow_classroom_2]
	@Building_name [Varchar](50),--学生输入的教学楼名字
	@Classroom_id [Varchar](50),--学生输入的教室号
	@Student_id [Varchar](50),--学生的ID
	@Date [Datetime],--学生输入的教室日期
	@Period [Varchar](50),--学生输入的借教室的时段
	@Fun [Varchar](50),--学生输入的教室用途
	@success decimal output--返回值,作为标志借教室是否成功的标志
as
	begin
		declare @State [Varchar](50);--在存储过程中使用的变量,判断教室的使用状态
		declare @bID [Varchar](50);--在存储过程中使用的变量,更新表时暂时存放教学楼号
		--set @success=0;
		--找到与教学楼名称相对应的教学楼编号
		select @bID = CM_Building_id from CM_Building where CM_Building_name=@Building_name;
		select @State = CM_Classroom_fun  from CM_Classroom where CM_Classroom_id=@Classroom_id and CM_Building_id=@bID;
		if @State = '空闲'  
		--如果教室的使用状态为空闲,
		begin
			--更新教室表的相应教室的使用状态和相应的时间段
			update CM_Classroom set CM_Classroom_fun=@Fun where CM_Building_id=@bID
														and CM_Classroom_id=@Classroom_id;
			update CM_Classroom set CM_Classroom_period=@Period where CM_Building_id=@bID
														and CM_Classroom_id=@Classroom_id;
			--插入一条借用教室的新纪录
			Insert into CM_Borrow(CM_Building_id,CM_Classroom_id,CM_Student_id,CM_Borrow_date,
				CM_Borrow_period,CM_Borrow_state)Values(@bID,@Classroom_id,@Student_id,@Date,@Period,1);
			--返回结果为true,表示借教室成功
			set @success = 1;
		end
		else
		begin
			set @success=0;
		end
		return @success;
	end


带有5个输入参数,一个输出参数

输入参数用CM_cmd.Parameters属性处理

输出参数的使用:

CM_cmd.Parameters.Add("@success", SqlDbType.Decimal);
CM_cmd.Parameters["@success"].Direction = ParameterDirection.Output;//表示success为输出参数







所谓存储过程,即是运行在后台的函数,存储过程的优点很明显:安全,减少网络流量;存储过程也有之缺点,1、复杂,初学者可能不太好理解其运行机理。2、数据库移植不方便:3、代码可读性差,相当难维护
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: