机房收费系统3之存储过程

一,定义

官方定义:是在大型数据库系统中,一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。

个人理解:对数据库进行复杂操作时,比如对多个表进行Update,Insert,Query,Delete时,对这些复杂操作的SQL语句的封装。

二,基本语法:

1.创建存储过程

基本语法:create procedurepro_name()

begin

.........

End

注意:过程名:尽量以pro_或者proc_开头,不建议使用使用sp_为前缀,因为SQLServer系统的存储过程都是以sp_开头,这样在查找的时候会先查找系统自身的,降低查询速度。

2.调用存储过程

基本语法:callpro_name()

注意:存储过程名称后面必须加括号,哪怕该存储过程没有参数传递

3.删除存储过程

基本语法:

drop procedurepro_name//

注意:不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程

好了,基本存储过程的知识了解了,那我们现在机房收费系统阶段最主要用到了存储过程的创建以及使用,现在用一个例子简单介绍一下。

三,举例--机房收费系统退卡

1.首先创建存储过程:在自己所建的数据库中找到可编程性--右击存储过程---新建存储过程,如图:

2.在新建的存储过程中添加相应的代码:

-- =============================================
-- Author:		宋笑

-- Create date: 2014年6月29日

-- Description:	退卡,删除对应卡号的Card_info,student_info记录,同时添加RetundCard_info
-- =============================================
CREATE PROCEDURE [dbo].[Proc_RetundCard]

	-- 添加所用到的参数
	@Cardno varchar(20),               --退卡的卡号
	@Stuno varchar(20),                --退卡人的学生号
	@Userno varchar(20),               --退卡人的教工号
	@OnworkName varchar(20),           --退卡的操作人员
	@RetundDate varchar(20),           --退卡日期
	@RetundTime varchar(20),           --退卡时间
	@RetundCash varchar(20),           --退款金额
	@RetundName varchar(20)            --退卡人

AS
BEGIN

	SET NOCOUNT ON;

    -- 添加涉及到的SQL语句
	delete Card_info where Cardno [email protected]            --删除对应卡号的卡表记录
	delete Student_info where Stuno [email protected]           --删除对应卡号的对应学生的学生记录
	insert into CancelCard_info (Cardno ,Userno ,OnworkName ,RetundDate ,RetundTime ,RetundCash ,RetundName )values (@Cardno ,@Userno ,@OnworkName ,@RetundDate ,@RetundTime ,@RetundCash ,@RetundName )     --添加退卡记录
END
GO

3.应用存储过程(D层)

*************************************************
'文 件 名:SqlserverCancelCardDAL
'命名空间:DAL
'内    容:
'功    能:
'文件关系:
'作    者:宋笑
'小    组:XX
'生成日期:2014/6/29 21:12:19
'版 本 号:V1.0.0.0
'修改日志:
'版权说明:

'*************************************************

Imports Entity
Imports IDAL
Imports SqlHelper
Imports System.Data.SqlClient
Public Class SqlserverCancelCardDAL : Implements ICancelCard

    '定义并实例化SqlHelper类
    Private clsSqlHelper As SqlHelper.SqlHelper = New SqlHelper.SqlHelper
    Public Function ReturnCard(enCard As CardEntity, enStudent As StudentEntity, enCancelCard As CancelCardEntity) As Integer Implements ICancelCard.ReturnCard

        '定义并实例化参数数组,防止SQL注入
        Dim paras As SqlParameter() = {New SqlParameter("@Cardno", enCancelCard.Cardno),
                                       New SqlParameter("@Stuno", enStudent.Studentno),
                                       New SqlParameter("@Userno", enCancelCard.Userno),
                                       New SqlParameter("@OnworkName", enCancelCard.OnworkName),
                                       New SqlParameter("@RetunrdDate", enCancelCard.RetundDate),
                                       New SqlParameter("@ReturnTime", enCancelCard.RetundTime),
                                       New SqlParameter("@ReturnCash", enCancelCard.RetundCash),
                                       New SqlParameter("ReturnName", enCancelCard.RetundName)}

        '定义并实例化字符串变量,用来要存放的SQL语句
        Dim strsql As String = "PROC_CancelCard"           '这里的strsql不再存放单条SQL语句而是存储过程

        '这里的CommandType.Text换成了CommandType.StoredProcedure,执行的不是语句而是存储过程了。
        Return clsSqlHelper.ExecAddDelUpdate(strsql, CommandType.StoredProcedure, paras)

    End Function
End Class

注意:IDAL层与D层相对应,函数的参数与应用的实体有关,应用了几个实体,参数增加,我这主要用到了卡,学生,退卡信息实体,所以参数为3个。

使用了存储过程,使代码变得更简单了,不用再编写多个函数来完成一个功能,有效地利用了封装。

机房收费系统3之存储过程

时间: 2024-10-20 20:51:17

机房收费系统3之存储过程的相关文章

机房收费系统重构之存储过程的使用

从一开始对于机房收费系统的无从下手,到现在已经接近尾声,像冬天的迷雾一样,随着时间散开了去,对于其也是越来越清晰,想一想,这种学习的过程还真是美妙. 当然只学习不去总结是没有意义的.今天我就来把存储过程的使用总结一下.拿用户注册来说,就是往数据库里添加用户,以方便更多的用户使用.那么用户注册我们要注意到什么呢? 1.通过卡号判断用户是否已经存在. 如果不存在该用户: 2.将信息写入学生表. 3.更新充值记录表 4.更新卡表中的余额. 我们分析可以得到,如果不存在该用户,我们需要同时改动三个表.当

机房收费系统之存储过程

在做机房收费系统过程中,为了减少代码的工作量,有人用到了存储过程,那么,什么是存储过程,使用存储过程有什么好处和缺陷呢? 存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它.存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程. 数据库存储过程的实质就是部署在数据库端的一组定义代码以及SQ

机房收费系统—《存储过程》

前两天博客写了视图和触发器,本来不想写存储过程了,想想会用就行了.但是自己在用的过程中越到很多问题,不做个总结一定还会用错的. 机房收费系统里我为什么要用它呢? 在这之前我的回答是:因为大家都在用,所以一定会用到. 现在我的回答是:因为它可以将常用的或者很复杂的工作,用SQL语句写好并存储起来,用户在可以直接通过存储过程的名称进行调用. 相对于使用SQL语句,存储过程的好处是: 1.执行速度快 存储过程创建的时候,数据库已经对其进行了一次解析和优化,存储过程一旦执行,就会保留在内存中,下次再执行

机房收费系统--存储过程

在这次机房收费系统中学习到的东西还真不少.E-R图,视图,存储过程,触发器等等.这些东西都是在之前学习过的,这次运用到实践中,收获倍增. 运用存储过程的好处 1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度. 2.当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用. 3.过程可以重复使用,

存储过程--机房收费系统

1.什么是存储过程? 定义: 存储过程是由流控制和SQL语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,应用程序使用时只要调用即可. 在敲机房收费系统的注册窗体时,注册窗体如下: 点击存盘之后,需要进行的操作,将学生信息写入到T_Student表中,将卡的信息写入到T_Card表中,将充值信息写入到T_Recharge表中,如果是不适用存储过程的话,需要单独向表中写入三次数据,每次都有很多重复的对数据库进行操作的代码.而用了存储过程之后,只需要把相应的参数和语句写入到数据库的存储过程

vb.net机房收费系统——存储过程

一.使用背景 机房收费系统结账的时候,需求是当选择一个用户,同时显示该用注册.充值和退卡记录,这些数据来提供结账数据,而结账之后要同时更新卡.充值.退卡表三个表,如果直接写SQl语句的话会是很复杂的.而这些需求可以封装为一个存储过程,点击结账之后只需要传入参数执行存储过程即可. 二.存储过程简介 存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它.存储过程是数据库中的一个

vb.net机房收费系统重构——存储过程的使用

在敲写七层登陆过程中,接触了存储过程的概念,但当时还没使用.在正式的重构过程中,一点点添加,将存储过程也添加到了重构中.才正式了解了存储过程. 首先 [存储过程的概念] 存储过程Procedure是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行. 存储过程中可以包含逻辑控制语句和数据操纵语句,它可以接受参数.输出参数.返回单个或多个结果集以及返回值. [存储过程的使用] 首先,打开数据库--存储过程 右键-新建存储过程 CREATE PR

机房收费系统——存储过程的运用

在机房收费系统中的"结账"部分,要求选中操作员然后点击"结账"button后,将该操作员办理的注冊.充值.退卡业务的状态改为"已结账".注冊.充值和退卡分别记录在三张表中,假设依照传统的办法,须要在DAL层写三个函数,分别update每张表的isCheck为"true",且不说写多少代码,费多少力气,这样还减少了系统的执行速度,easy出错. 在个人版机房收费系统重构中,我们不是像曾经那样仅仅要功能实现就可以,而是变"

机房收费系统(VB.NET)——存储过程实战

最初接触存储过程是在耿建玲老师的视频里,当初只是草草过了一遍,只是有了个印象,知道了这个名词:大二时也有SqlServer数据库这门课,不过老师没讲,自己也没看:真正对存储过程的了解来自于自学考试中的<数据库系统原理>,在考试中,知道存储过程是干嘛的,在纸上怎么写,但从来没有在DBMS中亲手敲过.于是机房收费系统给了我这个机会. 在这里不再过多叙述关于存储过程德基本知识,只写一下在机房收费系统这个小项目中是如何用到存储过程的. 背景: 机房收费系统中有一个注册的功能,原型图如下: 注册时,需要