首页 > 代码库 > 存储过程
存储过程
最近一直在忙着机房重构,忙碌的日子让自己过得很充实。但是,一个功能怎么也实现不了,也确实让人有点纠结啊。比如说,机房收费系统中有充值的功能,这个需要在充值后对相关的表进行操作,既要写入充值记录,也要更新余额。如果按照以前的思路,需要调用好几个方法分别取实现,显得有点麻烦。而且,假如修改代码的话,就可能使整个过程都需要进行修改,明显不符合要求。
这时候一个很好的办法就是利用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行业,而且是作为中坚力量,所以,我们必须从中吸取经验,在开发软件程序的时候一定要做到,时刻为人服务,给人提供方便。这样我们的成果才能被人所关注,我们也才能走向成功。
存储过程