概述
之前只是听他们说存储过程,自己这次通过实践来学习。
1、何为存储过程
存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。
2、为何使用存储过程(正数为优点,负数为缺点)
自己的感受:
1)重复使用:就相当于定义了一个模块一样,只要调用它就可以实现某个功能,不用再写重复代码。
2)参数少:因为是在数据库中,所以可以直接调用数据库中的数据,减少代码量。
3)安全:防止了SQL注入。
-1)调试困难:当有一处错误时后边很多地方报错,查看原因时会不清楚错误怎么改。
更多原因:
4)减少网络流量。存储过程位于服务器上,调用的时候只需要传递存储过程的名称以及参数就可以了,因此降低了网络传输的数据量。
5)安全性。参数化的存储过程可以防止SQL注入式攻击,而且可以将Grant、Deny以及Revoke权限应用于存储过程。
5)安全性。参数化的存储过程可以防止SQL注入式攻击,而且可以将Grant、Deny以及Revoke权限应用于存储过程。
-2)移植问题,数据库端代码当然是与数据库相关的。但是如果是做工程型项目,基本不存在移植问题。
-3)重新编译问题,因为后端代码是运行前编译的,如果带有引用关系的对象发生改变时,受影响的存储过程、包将需要重新编译(不过也可以设置成运行时刻自动编译)。
-4)如果在一个程序系统中大量的使用存储过程,到程序交付使用的时候随着用户需求的增加会导致数据结构的变化,接着就是系统的相关问题了,最后如果用户想维护该系统可以说是很难很难、而且代价是空前的,维护起来更麻烦。
3、使用存储过程需要注意什么——看代码注释
USE [charge] GO /****** Object: StoredProcedure [dbo].[proc_Recharge] Script Date: 11/23/2017 9:30:33 PM ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: <Author,,智雪艳> -- Create date: <2017-11-23,,> -- Description: <充值 Recharge,,> -- ============================================= CREATE PROCEDURE proc_Recharge --创建存储过程时格式应该是:CREATE PROCEDURE 名称;执行后会变成:ALTER PROCEDURE [dbo].[proc_Recharge] --定义用到的变量 @cardno char(11), @userid char, @rechargedate date, @rechargemoney money, @rechargetime time, @ischeck bit, @balance money AS --在存储过程中需要用到临时变量,临时变量的定义如下 declare @remaincash money BEGIN --临时变量的赋值 set @remaincash =(select balance from Card_Info where cardno=@cardno ); --查找表里一个数据格式为select balance from Card_Info where cardno=@cardno --添加充值表 insert into Rechargecash_Info(cardno ,userid ,rechargemoney ,rechargedate ,rechargetime,ischeck,balance ) values(@cardno,@userid ,@rechargemoney ,@rechargedate ,@rechargetime ,@ischeck ,@balance+@remaincash ); --更新卡表 Update Card_Info set balance =balance +@rechargemoney; --更新学生表 select * from Student_Info where cardno=@cardno Update Student_Info set balance =balance +@rechargemoney; END
4、在D层调用存储过程
'充值
Public Function IRecharge(RechargeInfo As E_RechargeEntity, CardInfo As E_CardEntity, StudentInfo As E_StudentEntity) As Boolean Implements I_RechargeIDAL.IRecharge
Dim SQLHelper As New SQLHelper()
Dim result As Boolean
'SQL语句,这里直接调用数据库中的存储过程
Dim sql As String = "proc_Recharge"
'增加充值记录
Dim Parameter As SqlParameter() = {New SqlParameter("@cardno", RechargeInfo.CardNo),
New SqlParameter("@userid", RechargeInfo.UserId),
New SqlParameter("@rechargedate", Now),
New SqlParameter("@rechargemoney", RechargeInfo.RechargeMoney),
New SqlParameter("@rechargetime", Convert.ToDateTime(Now).ToShortTimeString),
New SqlParameter("@ischeck", RechargeInfo.IsCheck),
New SqlParameter("@balance", RechargeInfo.RechargeMoney)}
result = SQLHelper.ExecNonQuery(sql, CommandType.StoredProcedure, Parameter)
Return result
End Function
最后
以上就是发嗲曲奇为你收集整理的机房重构存储过程的全部内容,希望文章能够帮你解决机房重构存储过程所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复