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

1、什么是存储过程?

定义:

存储过程是由流控制和SQL语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,应用程序使用时只要调用即可。

在敲机房收费系统的注册窗体时,注册窗体如下:

点击存盘之后,需要进行的操作,将学生信息写入到T_Student表中,将卡的信息写入到T_Card表中,将充值信息写入到T_Recharge表中,如果是不适用存储过程的话,需要单独向表中写入三次数据,每次都有很多重复的对数据库进行操作的代码。而用了存储过程之后,只需要把相应的参数和语句写入到数据库的存储过程中去,在客户端直接调用即可。

2、怎样使用存储过程?

以上面的注册为例,首先新建存储过程

数据库会自动弹出一个已经建好主要语句结构的存储过程,你只需要在里面添加参数和语句即可,存储过程代码如下:

USE [ChargeSystem]
GO
/****** Object:  StoredProcedure [dbo].[PROC_Register]    Script Date: 07/30/2014 21:30:47 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		<Author,,Name>
-- Create date: <Create Date,,>
-- Description:	<Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[PROC_Register]
	-- Add the parameters for the stored procedure here
	@stuID varchar(20),@stuName varchar(20),@stuSex varchar(4),@stuDepart varchar(20),@stuGrade varchar(20),@stuClass varchar(20),@stuNote varchar(50),
	@cardID varchar(10),@cardType varchar(20),@remainCash varchar(4),@registerAdmin varchar(10),@isChecked varchar(20),
	@userID varchar(11),@rechargeCash varchar(4)
AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;

    -- Insert statements for procedure here
    insert into T_Student(stuID ,stuName ,stuSex ,stuDepart ,stuGrade ,stuClass ,stuNote ) values(@stuID ,@stuName ,@stuSex,@stuDepart,@stuGrade ,@stuClass ,@stuNote )
    insert into T_Card (cardID,stuID ,cardType ,remainCash ,registerDate ,registerTime ,registerAdmin ,isChecked ) values(@cardID ,@stuID ,@cardType ,@remainCash ,CONVERT (varchar(20),GETDATE(),120) ,CONVERT (varchar(20),getdate(),108) ,@registerAdmin ,@isChecked )
    insert into T_Recharge (cardID ,userID ,rechargeCash ,rechargeDate ,rechargeTime ) values (@cardID ,@userID ,@rechargeCash ,CONVERT (varchar(20),GETDATE(),120) ,CONVERT (varchar(20),getdate(),108)  )

END

写完之后,要执行成功之后才可以调用

DAL层调用代码

Public Function Register(ByVal enStudent As Entity.StudentEntity, ByVal enCard As Entity.CardEntity, ByVal userID As String, ByVal enRecharge As Entity.RechargeEntity) As Boolean Implements IRegister.Register
        Dim sqlHelper As New Sqlhelper   '实例化sqlHelper类
        Dim cmdType As CommandType = CommandType.StoredProcedure    '定义命令类型
        Dim cmdText As String = "PROC_Register"   '数据库执行字符串
        '传参
        Dim parameter As SqlParameter()
        parameter = {New SqlParameter("@userID", userID),
                     New SqlParameter("@stuName", enStudent.StuName),
                     New SqlParameter("@stuID", enStudent.StuID),
                     New SqlParameter("@cardID", enCard.CardID),
                     New SqlParameter("@stuSex", enStudent.StuSex),
                     New SqlParameter("@stuDepart", enStudent.StuDepart),
                     New SqlParameter("@stuGrade", enStudent.StuGrade),
                     New SqlParameter("@stuClass", enStudent.StuClass),
                     New SqlParameter("@stuNote", enStudent.StuNote),
                     New SqlParameter("@cardType", enCard.CardType),
                     New SqlParameter("@remainCash", enCard.RemainCash),
                     New SqlParameter("@rechargeCash", enRecharge.RechargeCash)}
        Return sqlHelper.ExcuteAddDelUpdate(cmdText, cmdType, parameter)   '返回执行的结果,成功True;否则,False
    End Function

3、为什么要使用存储过程?

1、SQL语句执行时要先编译,然后再执行,存储过程就是编译好的一些SQL语句,应用程序需要时直接调用就行,所以存储过程比直接使用SQL语句的效率要高。

2、当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。

3、就比如说注册的时候,如果过程中出现了bug,那么你的调试工作的量会很大,而如果用存储过程的话,若是SQL语句的问题,那你就可以在一个地方对SQL语句进行调试。

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

时间: 2024-08-04 15:59:29

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

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

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

机房收费系统之存储过程

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

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

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

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

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

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

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

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

一,定义 官方定义:是在大型数据库系统中,一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它. 个人理解:对数据库进行复杂操作时,比如对多个表进行Update,Insert,Query,Delete时,对这些复杂操作的SQL语句的封装. 二,基本语法: 1.创建存储过程 基本语法:create procedurepro_name() begin ......... End 注意:过程名:尽量以pro_或者proc_开

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

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

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

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

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

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