【机房重构】SQl之存储过程

上篇博客介绍了SQl视图的使用,这篇博客通过内容和实例应用来简单介绍一下存储过程。 在机房重构的过程中,犯了个大忌(数据库设计在重构过程被修改了),所以影响了一个功能的实现,就又重新敲了一下机房收费系统退卡功能。正如“塞翁失马,焉知非福”,纯三层的代码实现变成了利用存储过程之后的完美实现。期间的磕磕绊绊都让我们对存储过程加深了理解。

存储过程:

定义:

当需要写多条SQl语句的时候,就可以使用存储过程,在数据库中建立存储过程。之后在VS中通过调用存储过程来使用。

百度百科:存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL
语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。

优点:

(来自百度)用的越多,越能体会它的好处,现在理解不是很深,只能借鉴网络的了。

        1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
  2.当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。
  3.存储过程可以重复使用,可减少数据库开发人员的工作量
  4.安全性高,可设定只有某此用户才具有对指定存储过程的使用权

使用:

1. 使用之前,现在Sql Sever中通过T_SQL语句建立存储过程。如下图所示,右击【存储过程】,选择新建存储过程。

之后再出现的窗口中输入创建存储过程的代码,如下所示:

CREATE procedure [dbo].[proc_Cancelcard]  --写存储过程的名字pro_Cancelcard

--以下是定义的参数,也就是在使用此过程的时候,需要传进来值的参数。
@CardNo varchar(15),
@CancelDate date,
@CancelTime varchar(20),
@Statue varchar(10),
@CancelUserID varchar(10)

as 

--声明的变量
declare
@CancelCash numeric(18, 2),
@StudentNo  varchar(11)
begin

--给定义的变量直接进行赋值查询
select<span style="color:#ff0000;"> @CancelCash =Cash ,@StudentNo=StudentNo</span> from V_StudentInfo  where CardNo [email protected]  

--将传入的参数和已赋值的变量新插入记录到退卡表中
Insert into T_CancelCardInfo (StudentNo,CardNo,CancelCash,CancelDate,CancelTime,Statue,CancelUserID) values(@StudentNo,@CardNo,@CancelCash,@CancelDate,@CancelTime,@Statue,@CancelUserID)

--更新了卡表中的状态Statue
Update T_CardInfo set Statue ='已停用'

end

说明:如果你的存储过程中的SQl语句是第一条查询,第二条要使用查询结果的话,就不用定义参数直接定义变量进行赋值查询如红字所示

2.在VS中调用存储过程

D层代码:

    ''' <summary>
    ''' 调用存储过程去插入,更新
    ''' </summary>
    ''' <param name="enCancel"></param>
    ''' <param name="eninfo"></param>
    ''' <param name="enline"></param>
    ''' <returns>boolean型变量</returns>
    ''' <remarks></remarks>
    Public Function CancelCardDAL(ByVal enCancel As Entity.CancelCardEntity, ByVal eninfo As Entity.V_StudentEntity, ByVal enline As Entity.LineInfoEntity) As Boolean

        Dim helper As New SqlHelper '创建SQlhelper的对象
        Dim flag As Boolean

        Dim sql As String = "proc_CancelCard"  '创建的存储过程的名字
        Dim params As SqlParameter() = {New SqlParameter("@CardNo", enCancel.CardNo),
                                        New SqlParameter("@CancelUserID", enCancel.CancelUserID),
                                       New SqlParameter("@Statue", enCancel.Statue),
                                       New SqlParameter("@CancelDate", enCancel.CancelDate),
                                       New SqlParameter("@CancelTime", enCancel.CancelTime)}

        flag = helper.ExecuteNonQuery(sql, CommandType.StoredProcedure, params)

        Return flag  '返回boolean型

    End Function

退卡功能说明

1.在用户输入卡号,应该先去查询是否存在此卡号,是否是正在上机的;

2.之后应该查询余额,学号(这个查询使用视图,不过后来改完数据库发现,这个视图可以不用,就当是练手实践了)和当前时间,用户等往退卡表中添加一条记录;

3.之后更新卡表中的卡的状态;

4.显示退卡信息,提示退卡成功。

因为之前纯三层的代码,和这版比较之下,直接显示了差别。代码多,调用关系乱,很考验人的大脑。存储过程一个顶多个SQL,何乐而不为呢?

【机房重构】SQl之存储过程

时间: 2024-07-29 13:47:47

【机房重构】SQl之存储过程的相关文章

机房重构(3)——存储过程

在敲机房收费过程中我们都会遇到这样的问题:很多功能实现都需要涉及到多张表的操作,比如充值.退卡.结账等功能的实现.这就需要我们多次对数据库进行操作,不仅代码量大大增加,而且执行效率也会大打折扣.为了提高效率,于是,存储过程就华丽登场了. 1.简介 存储过程是一组为了完成特定功能的语句集,经过编译后存储在数据库中,用户通过制定存储过程的名称并给出参数来执行它.存储过程在运算时生成执行方式并存储在数据库当中,当其再次运行时速度比单个的SQL语句要快.    2.优缺点 1)优点 a.复用性强.存储过

【机房重构】SQL之视图

最近在重构机房收费系统,越往后就会越感觉到这里更多的是对之前学过知识(数据库,设计模式)的一种应用和回顾.比如在登录功能中用到了抽象加反射,在学生下机中,我们可以用触发器来同时更新两个表.这里就先说一下视图的使用,关于视图的有点和作用百度上有很多答案,在此不再赘述. 视图定义: 自己理解:在涉及到多张表的操作的时候就可使用视图.这样可以避免与数据库直接联系.并且当你更新数据库数据时,就会自动更新视图中的数据,方便以后查询. 百度百科:计算机数据库中的视图是一个虚拟表,其内容由查询定义.同真实的表

【机房重构】——存储过程(Stored Procedure)

[前言] 在学习数据库知识时,就曾经接触过存储过程,当时只是如蜻蜓点水一般,短暂的停留,并没有留下什么印象,在进行机房重构学习过程中,又重新认识了存储结构,从开始的抵触,不想用到后来逐渐了解,学着使用,思路越来越清晰,真正去做了才发现了其中的乐趣:常常说学习需要多总结,现在就是在积累,每一次的收获都要整理记录,才能留下深刻的印象,下面就来学习一下存储过程的知识吧. [存储过程的概念] 在采用客户机/服务器(C/S)计算模式的数据库系统中,很多工作可以在客户端完成,也可以在服务器端完成,数据库除了

【机房重构】—存储过程当媒人

以下是本人亲眼所见的机房重构帅小伙(简称重构),借助存储过程媒人(简称存储)与数据库大美女(简称:库)交往的经历,和大家分享一下. 那是一个风和日丽的白天,重构帅小伙独自一人走在处处飘香的初夏的校园中,他一直在思考,如何与库美女更容易的交往呢?以前重构去找库美女的时候总是需要先打一个电话(链接一个表),再问问库美女在哪里(再链接一个表),然后才能去找库美女(向两个表中存入数据):重构绞尽脑汁终于想出了一个办法, 他通过手机中的GPS(存储过程)直接定位库美女的位置,然后突然给库美女一个惊喜,这样

机房重构——视图

视图.存储过程.触发器等等早就听说过,却没有真正接触过,一直处在一个以后再说的状态中,逃是逃不掉了. 机房重构,重构出了什么?留着这个疑问.重构完以后再做总结. 视图:在SQL中,外模式一级数据结构的基本单位是视图,就是从若干个基本表和(或)其他视图构造出来的表.其实就是一张虚表. 注意:在使用视图的时候,应当提前设置好关联表的主外键. 在机房收费系统里功能之一,学生查看余额时,用到了两张表的内容,Card表里的状态和余额,其他信息都来自学生表. 视图的创建和删除: 方法一:使用SQL语句创建视

牛腩新闻发布系统--重构SQL Helper

天外有天,人外有人.自我进提高班以来,一直都在考虑,先前重构机房的时候,看到别人在D层加了SQL Helper,就一定要学者加上玩玩,等做完了以后,进行下一个阶段牛腩的时候,又看到了人家建的SQL Helper,不觉感慨,跟人家比,人家就是我的老师! 闲话就不多说了,进行正式的话题:如何写好SQL Helper?从宏观上讲,SQL Helper是完全体现了面向对象的抽象和封装的思想的.它对重复代码抽取出来,进行抽象,抽象就是为了封装,提高了代码的复用. 那么就该讨论怎么写的问题.如果我先上来给大

机房重构(4)——触发器的使用

上篇文章<机房重构(3)--存储过程>介绍了存储过程的使用,接下来介绍一下触发器的使用.说到触发器,我们并不陌生,我们学习过程中涉及到很多相关的知识,但是欠缺的实践应用.通过这次机房收费,对触发器有了进一步的理解. 1.简介 触发器也是一种与表事件相关的特殊的存储过程.由事件来触发,当对一个表进行操作(insert,delete,update)时就会激活它执行.经常用于加强数据的完整性约束和业务规则等.它与存储过程的区别是触发器不能执行EXCUTE语句调用,而是在用户执行Transact_SQ

【机房重构】总结

机房收费个人版算是磕磕绊绊完毕了,这里话不多说,收获的东西,遇到的困难.仅仅有自己才干懂得.总结一下重构过程中的问题.不足及学到的东西. 一.验收问题 那天紧赶慢赶的完毕及功能实现,就想着急的找师父给看看.结果师父正好有事.就找人给自己点点看看有什么不足的地方.辛亏那是师父有事啊.出现的错误非常多都是由于自己考虑不全面,就是没有做好为人民服务. 这里基本的总结几点验收时师父的指点和自己发现的问题. 1.SQL注入的问题.能够去了解一下 2.datagridview中字段直接显示了数据库中的字段,

机房重构之SqlHelper应用

由于机房重构过程中每个功能的实现都会涉及到数据库的链接访问,代码重复率非常高,耗时耗力,还会使系统出现代码冗余,是一件非常讨人厌的工作.进而把这些重复的代码抽象成一个类,以直接调用的方式来满足需求. SqlHelper是一个基于·NET Framework的数据库操作组件,组件中包含数据库操作方法.SqlHelper用于简化重复的去写那些数据库连接(SqlConnection),SqlCommand,SqlDataReader等等.SqlHelper 封装后通常是只需要给方法传入一些参数如数据库