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

在敲机房收费过程中我们都会遇到这样的问题:很多功能实现都需要涉及到多张表的操作,比如充值、退卡、结账等功能的实现。这就需要我们多次对数据库进行操作,不仅代码量大大增加,而且执行效率也会大打折扣。为了提高效率,于是,存储过程就华丽登场了。


1、简介

存储过程是一组为了完成特定功能的语句集,经过编译后存储在数据库中,用户通过制定存储过程的名称并给出参数来执行它。存储过程在运算时生成执行方式并存储在数据库当中,当其再次运行时速度比单个的sql语句要快。


2、优缺点

1)优点

a、复用性强。存储过程可以重复使用,从而减少数据库开发的工作量。

b、提高执行效率。存储过程在创建的时候就进行了编译以后每次执行时都不需要重新编译,执行时比一般sql语 句更快,提高了效率。

c、减少网络流量。存储过程位于服务器上,调用的时候只需要传递存储过程的名称以及参数就可以了,因此降低 了网络传输的数据量。

d、更加安全。参数化查询过程可以防止sql注入攻击。


2)缺点

虽然存储过程的使用提高了执行效率,但是,若一个程序系统中大量使用存储过程,如果在后期需求变化时导致数据结构发生变化,就会发生问题,而且后期系统维护也会非常困难,代价也是非常大的。

所以,在使用存储过程时一定要慎重,权衡利弊,尽力使程序达到最优。


3、创建

一下以充值为例创建一个存储过程,充值业务逻辑为:

1)查询注册表,判断是否已注册,如无注册信息

2)插入学生信息

3)插入学生注册信息


sql Sever中建立存储过程,如图,右击选择新建存储过程。

存储过程的代码如下:

@H_404_129@-- ============================================= -- Author: <YANG> -- Create date: <2014年8月10日> -- Description: <注册> -- ============================================= CREATE PROCEDURE [dbo].[PROC_Register] --创建存储过程 -- 添加存储过程中的参数 @CardID VARCHAR(15),@StuID VARCHAR(10),@StuName varchar(10),@StuSex varchar(10),@StuDepart varchar(10),@StuGrade varchar(10),@StuClass varchar(10),@StuText varchar(50),@StuCash varchar(10),@StuStatus varchar(10),@RegTime varchar(10),@RegDate varchar(10),@UserID varchar(10),@RegCash varchar(15),@CheckStatus varchar(10) AS BEGIN --添加sql语句 select * from T_RegInfo where CardID =@CardID if @@ROWCOUNT =0 insert into T_StuInfo (CardID,StuID,StuName,StuSex,StuDepart,StuGrade,StuClass,StuText,StuStatus,StuCash ) values (@CardID,@StuID,@StuName,@StuSex,@StuDepart,@StuGrade,@StuClass,@StuText,@StuStatus,@StuCash ) insert into T_RegInfo (CardID,RegDate,RegTime,UserID,RegCash,CheckStatus ) values (@CardID,@RegDate,@RegTime,@UserID,@RegCash,@CheckStatus ) END 这样一个存储过程就完成了,需要的时候,我们在D层直接调用就可以,高效快捷。

相关文章

Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强制返回为文本 --------------------------...
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办法, Format 或者FormatDateTime 竟然结果和...
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace My ‘全局错误处理,新的解决方案直接...
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用的爽呀,这篇文章写与2011年,看来我以前没...
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选中的单元格进行处理 Dim m As Range, t...
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integ...