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

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语句进行调试。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏乐沙弥的世界

SQL*Loader使用方法

SQL*Loader由一个输入控制文件来控制整个装载的相关描述信息,一个或多个数据文件作为原始数据,其详细组成结构包括

13320
来自专栏Java帮帮-微信公众号-技术文章全总结

第三十天-加强2-多表查询&JDBC&连接池&DBUtils&综合案例【悟空教程】

第三十天-加强2-多表查询&JDBC&连接池&DBUtils&综合案例【悟空教程】

18340
来自专栏分布式系统和大数据处理

数据库对象命名参考

编码规范是一个优秀程序员的必备素质,然而,有很多人非常注重程序中变量、方法、类的命名,却忽视了同样重要的数据库对象命名。这篇文章结合许多技术文章和资料,以及我自...

13420
来自专栏ASP.NET MVC5 后台权限管理系统

ASP.NET MVC5+EF6+EasyUI 后台管理系统(89)-EF执行SQL语句与存储过程

EF上下文 DbContext包含了DataBase属性,里面有很多方法,但是实际我们只需要用到个方法

14200
来自专栏玩转JavaEE

MongoDB中各种类型的索引

上篇文章中我们介绍了MongoDB中索引的简单操作,创建、查看、删除等基本操作,不过上文我们只介绍了一种类型的索引,本文我们来看看其他类型的索引。 ---- _...

30470
来自专栏跟着阿笨一起玩NET

sql server递归查询

-----------------------------------------------

82220
来自专栏web编程技术分享

【手把手】JavaWeb 入门级项目实战 -- 文章发布系统 (第九节)

31860
来自专栏ASP.NET MVC5 后台权限管理系统

ASP.NET MVC5+EF6+EasyUI 后台管理系统(89)-EF执行SQL语句与存储过程

这一节,我们来看看EF如何执行SQL语句与读取存储过程的数据,可能有一部分人,还不知道EF如何执行存储过程与原生SQL语句! 我们什么时候要直接使用原生的S...

45260
来自专栏GreenLeaves

一、Linq简介

16130
来自专栏乐沙弥的世界

Oracle 硬解析与软解析

Oracle 硬解析与软解析是我们经常遇到的问题,什么情况会产生硬解析,什么情况产生软解析,又当如何避免硬解析?下面的描述将给出

13230

扫码关注云+社区

领取腾讯云代金券