数据库课程设计心得【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、代码可读性差,相当难维护
相关文章推荐
- 数据库课程设计心得【3】---存储过程的运用
- 数据库课程设计心得【2】------SqlCommand.Parameter属性
- SQL在存储过程设计心得体会和优化措施
- 数据库的存储过程、数据库设计范式、数据库关系
- 学生成绩数据库设计 五 执行存储过程
- 数据库的存储过程、数据库设计范式、数据库关系
- 数据库的存储过程、数据库设计范式、数据库关系
- 数据库课程设计心得【6】----总结篇
- 数据库课程设计心得【1】
- 设计案例3----利用存储过程和JOB 设计从餐饮ERP数据库将数据抽取、数据清洗到BI数据库
- 使用存储过程实现进销存系统中的先进先出算法(1)――数据库与存储过程设计
- 数据库课程设计心得【4】---触发器
- 数据库课程设计心得【6】----总结篇
- 数据库课程设计心得【1】
- 数据库课程设计心得【4】---触发器
- 使用存储过程实现进销存系统中的先进先出算法(1)——数据库与存储过程设计
- 数据库课程设计心得【1】
- 运用ORACLE的OO4O类库函数解决调用存储过程向远程数据库上传超过32K图片失败的问题
- 第16天(就业班) 数据约束、数据库设计、关联查询、存储过程、权限和备份
- 数据库设计札记 - 存储过程