zoukankan      html  css  js  c++  java
  • 存储过程

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

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

  • 相关阅读:
    Oracle SQL语句大全—查看表空间
    Class to disable copy and assign constructor
    在moss上自己总结了点小经验。。高手可以飘过 转贴
    在MOSS中直接嵌入ASP.NET Page zt
    Project Web Access 2007自定义FORM验证登录实现 zt
    SharePoint Portal Server 2003 中的单一登录 zt
    vs2008 开发 MOSS 顺序工作流
    VS2008开发MOSS工作流几个需要注意的地方
    向MOSS页面中添加服务器端代码的另外一种方式 zt
    状态机工作流的 SpecialPermissions
  • 原文地址:https://www.cnblogs.com/victor-grace/p/7253813.html
Copyright © 2011-2022 走看看