存储过程

简单了解

  • where from:
  • 从哪来?SQL语句,存储过程是建立在SQL语句的基础上的。
  • why / when / where to go:
  • 为什么用? 涉及到多表操作的时候,D层的负担会很大,存储过程可以给D层减负。
  • what:
  • 是什么? SQL语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它存储过程是一堆SQL语句的集合。 其实就是为了实现对数据库某些操作的一堆SQL语句,编译之后可以在D层中调用。
  • How:
  • 怎么用,后面有下机实例展示。
  • 全面看待
  • 优点:
    • 重复使用,提高性能,安全防注入
  • 缺点:
  • 调试不便,不利于重新编译,后期维护不便,没有解耦和
    #对比触发器
  • 相同点在于:
    本质上都是SQL语句集,可以说触发器是特殊的存储过程。当用户执行某一特殊操作的时候,使数据库需要多处更新时,我们可以考虑采用触发器或者存储过程,给D层减负。
  • 不同点
  • 触发器是强制执行的,不需调用,只要满足了提前设定的触发条件,触发器便会自动执行设定操作。而存储过程是需要在程序中调用的。
  • 触发器是通过事件执行出发而被执行的,比如说我们对表进行增删改操作时,SQL server会自动执行触发器定义的增删给语句,这便是最直观的触发操作。

下机实践

数据库中操作

创建方式有两种,SQL语句创建和手动创建。这个不解释不展示,大家自行脑补或查询。

-- =============================================
-- Author:		<Hepburn Yang>
-- Create date: <Create Date,,>
-- Description:	<Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[Pro_Offline]
	-- 用到的参数,以及参数类型
	-- 备注:存储过程中声明的所有变量,都必须在D层中赋予一个初值。
	@CardNo char(10),
	@OffDate Date ,
	@OffTime time(7),
	@ConsumeTime numeric(18,1),
	@ConsumeCash numeric(18,1),
	@RemainCash numeric(18,1),
	@IsCheck char(10) 
	

AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;

   --更新line表
   update T_Line set offDate =@OffDate ,offTime =@OffTime ,consumeTime =@ConsumeTime ,consumeCash =@ConsumeCash ,remainCash =@RemainCash ,isCheck =@IsCheck where cardNo =@CardNo 

   --删除online表记录
   delete T_Online where cardNo =@CardNo 

   --更新Card余额
   Update T_Card set remainCash =@RemainCash where cardNo =@CardNo 

END

程序的调用

 Public Function IupdateInfo(OfflineInfo As LineEntity) As Boolean Implements ILineDAL.IupdateInfo

        Dim SQLHelper As DAL.SqlHelper = New DAL.SqlHelper()
        Dim Sql As String = "Pro_Offline"        '调用存储过程
        Dim result As Integer

        Dim Sqlparams As SqlParameter() = {New SqlParameter("@CardNo", OfflineInfo.CardNo),
                                         New SqlParameter("@OffDate", OfflineInfo.OffDate),
                                           New SqlParameter("@OffTime", OfflineInfo.OffTime),
                                           New SqlParameter("@ConsumeCash", OfflineInfo.ConsumeCash),
                                           New SqlParameter("@ConsumeTime", OfflineInfo.ConsumeTime),
                                           New SqlParameter("@RemainCash", OfflineInfo.RemainCash),
                                           New SqlParameter("@IsCheck", OfflineInfo.IsCheck)}

        result = SQLHelper.ExecNonQuery(Sql, CommandType.StoredProcedure, Sqlparams)
        If result <> 0 Then
            Return True
        Else
            Return False
        End If
    End Function

这样就可以完成同时更新三张表的操作了。有没有很方便?

#总结
认识一个事物时用到了一个很棒的套路–门卫思维,where,why ,what ,how ,when 。这些问题需要自己问自己,然后全面分析这个事物。

评论 33
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值