首页 > 代码库 > 存储过程

存储过程

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

      这时候一个很好的办法就是利用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行业,而且是作为中坚力量,所以,我们必须从中吸取经验,在开发软件程序的时候一定要做到,时刻为人服务,给人提供方便。这样我们的成果才能被人所关注,我们也才能走向成功。

存储过程