您的位置:首页 > 数据库

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

2010-12-19 14:58 489 查看
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、代码可读性差,相当难维护
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: