您的位置:首页 > 博客中心 > 数据库 >

【机房重构】SQl之存储过程

时间:2022-03-10 18:14

    上篇博客介绍了SQl视图的使用,这篇博客通过内容和实例应用来简单介绍一下存储过程。 在机房重构的过程中,犯了个大忌(数据库设计在重构过程被修改了),所以影响了一个功能的实现,就又重新敲了一下机房收费系统退卡功能。正如“塞翁失马,焉知非福”,纯三层的代码实现变成了利用存储过程之后的完美实现。期间的磕磕绊绊都让我们对存储过程加深了理解。

存储过程:

定义:

    当需要写多条SQl语句的时候,就可以使用存储过程,在数据库中建立存储过程。之后在VS中通过调用存储过程来使用。

    百度百科:存储过程(Stored Procedure)是在大型中,一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。

优点:

(来自百度)用的越多,越能体会它的好处,现在理解不是很深,只能借鉴网络的了。


    之后再出现的窗口中输入创建存储过程的代码,如下所示:

CREATE procedure [dbo].[proc_Cancelcard]  --写存储过程的名字pro_Cancelcard

--以下是定义的参数,也就是在使用此过程的时候,需要传进来值的参数。
@CardNo varchar(15),
@CancelDate date,
@CancelTime varchar(20),
@Statue varchar(10),
@CancelUserID varchar(10)

as 

--声明的变量
declare    
@CancelCash numeric(18, 2),
@StudentNo  varchar(11)
begin

--给定义的变量直接进行赋值查询
select<span style="color:#ff0000;"> @CancelCash =Cash ,@StudentNo=StudentNo</span> from V_StudentInfo  where CardNo =@CardNo  

--将传入的参数和已赋值的变量新插入记录到退卡表中
Insert into T_CancelCardInfo (StudentNo,CardNo,CancelCash,CancelDate,CancelTime,Statue,CancelUserID) values(@StudentNo,@CardNo,@CancelCash,@CancelDate,@CancelTime,@Statue,@CancelUserID)

--更新了卡表中的状态Statue
Update T_CardInfo set Statue ='已停用'

end
   说明:如果你的存储过程中的SQl语句是第一条查询,第二条要使用查询结果的话,就不用定义参数直接定义变量进行赋值查询如红字所示

     2.在VS中调用存储过程

 D层代码:

    ''' <summary>
    ''' 调用存储过程去插入,更新
    ''' </summary>
    ''' <param name="enCancel"></param>
    ''' <param name="eninfo"></param>
    ''' <param name="enline"></param>
    ''' <returns>boolean型变量</returns>
    ''' <remarks></remarks>
    Public Function CancelCardDAL(ByVal enCancel As Entity.CancelCardEntity, ByVal eninfo As Entity.V_StudentEntity, ByVal enline As Entity.LineInfoEntity) As Boolean

        Dim helper As New SqlHelper '创建SQlhelper的对象
        Dim flag As Boolean

        Dim sql As String = "proc_CancelCard"  '创建的存储过程的名字
        Dim params As SqlParameter() = {New SqlParameter("@CardNo", enCancel.CardNo),
                                        New SqlParameter("@CancelUserID", enCancel.CancelUserID),
                                       New SqlParameter("@Statue", enCancel.Statue),
                                       New SqlParameter("@CancelDate", enCancel.CancelDate),
                                       New SqlParameter("@CancelTime", enCancel.CancelTime)}

        flag = helper.ExecuteNonQuery(sql, CommandType.StoredProcedure, params)

        Return flag  '返回boolean型

    End Function
 

退卡功能说明

       1.在用户输入卡号,应该先去查询是否存在此卡号,是否是正在上机的;

       2.之后应该查询余额,学号(这个查询使用视图,不过后来改完数据库发现,这个视图可以不用,就当是练手实践了)和当前时间,用户等往退卡表中添加一条记录;

       3.之后更新卡表中的卡的状态;

       4.显示退卡信息,提示退卡成功。

   

    因为之前纯三层的代码,和这版比较之下,直接显示了差别。代码多,调用关系乱,很考验人的大脑。存储过程一个顶多个SQL,何乐而不为呢?


【机房重构】SQl之存储过程,布布扣,bubuko.com

热门排行

今日推荐

热门手游