• 存储过程


          最近一直在忙着机房重构,忙碌的日子让自己过得很充实。但是,一个功能怎么也实现不了,也确实让人有点纠结啊。比如说,机房收费系统中有充值的功能,这个需要在充值后对相关的表进行操作,既要写入充值记录,也要更新余额。如果按照以前的思路,需要调用好几个方法分别取实现,显得有点麻烦。而且,假如修改代码的话,就可能使整个过程都需要进行修改,明显不符合要求。

          这时候一个很好的办法就是利用Sql server中的一些操作来完成,常见的就是存储过程、触发器、视图等。一开始,我使用的是触发器实现几张表的关联,虽然能够实现该过程,但是它也有不足之处,最明显的就是处理后不会给用户返回信息,至于到底完成没有,用户只有通过在数据库中查询才能知道。而存储过程既可以实现表的关联,也能实现返回信息。

          那么,如何建立存储过程呢?

          首先,打开SQL Server,在自己所对应的数据库中进行操作,打开自己的数据库文件(比如ChargeSystem)-->可编程性-->存储过程,然后右击,新建存储过程,如图所示:



          然后就可以在打开的界面中写存储过程了,我以充值为例,其存储过程如下:

    --打开数据库
    USE [ChargeSystem]
    GO
    /****** Object:  StoredProcedure [dbo].[PROC_Recharge]    Script Date: 02/02/2015 16:40:35 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    --create procedure [dbo].[PROC_Recharge]
    
    ALTER procedure [dbo].[PROC_Recharge]
    --声明所需要的所有字段
    @cardID char(10),@studentID char(11),@usermanager char(10),@status char(8),
    @addcash char(10),@date char(10),@time char(10)
    as 
    begin
    --将数据填入到充值表
    insert into T_Recharge (CardID ,StudentID ,AddCash ,ToDate ,ToTime  ,UserManager ,Status )values (@cardID ,@studentID ,@addcash ,@date ,@time ,@usermanager ,@status )
    --更新学生表
    update T_Student set Cash =cast((Cash) as int)+@addcash  where CardID =@cardID 
    end 

          写好后执行,保存后即可。然后就得在程序中调用了,其D层代码如下:

     Public Function Recharge(enrecharge As En_Recharge) As String Implements IDAL.IManageT_Recharge.Recharge
            '调用存储过程
            Dim cmdText As String = "PROC_Recharge"
            '通过实体类进行传值
            Dim sqlparams As SqlParameter() = {New SqlParameter("@studentID", enrecharge.StudentID),
                                               New SqlParameter("@cardID", enrecharge.CardID), New SqlParameter("@addcash", enrecharge.AddCash),
                                               New SqlParameter("@date", enrecharge.ToDate), New SqlParameter("@time", enrecharge.ToTime),
                                               New SqlParameter("@usermanager", enrecharge.UserManager), New SqlParameter("@status", enrecharge.Status)}
            '定义并实例化helper类
            Dim helper As New sqlHelper
            '判断添加是否成功
            If helper.ExecuteNoQuery(cmdText, CommandType.StoredProcedure, sqlparams) > 0 Then '添加成功
                Return True
            Else
                Return False  '添加失败
            End If
        End Function
          

          这样就可以避免使用过多的方法,减少程序的复杂程度,同时也能后期维护带来便利。这次也就关联了几张表,等以后遇到大的系统的时候,可以通过此方法将多种表关联,较少代码量的同时,也为系统的实现带来了方便。

          

         小结:

             通过这次学习存储过程,一方面增加了自己的知识。另一方面,在思想上也有所提高。就从SQL Server提供的词方法来说,不就是全心全意为人民服务的理念吗?今后的我们肯定也会走向IT行业,而且是作为中坚力量,所以,我们必须从中吸取经验,在开发软件程序的时候一定要做到,时刻为人服务,给人提供方便。这样我们的成果才能被人所关注,我们也才能走向成功。

  • 相关阅读:
    为什么obj不等于obj?
    前端基础:深入理解内存空间
    微信小程序之富文本解析
    微信小程序加载更多 点击查看更多
    目前为止最全的微信小程序项目实例
    小程序图文列表一行俩列
    关于小程序 scroll-view 左右横向滑动没有效果(无法滑动)问题
    微信小程序商品筛选,侧方弹出动画选择页面
    小程序-带参跳转页面
    css-background-image 背景图片太大或太小
  • 原文地址:https://www.cnblogs.com/victor-grace/p/7253813.html
Copyright © 2020-2023  润新知