数据库操作--存储过程

在这次机房收费系统中学习到的东西还真不少。E-R图,视图,存储过程,触发器等等。这些东西都是在之前学习过的,这次运用到实践中,收获倍增。

运用存储过程的好处

1、存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。

2、当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。

3、过程可以重复使用,可减少数据库开发人员的工作量

4、全性高,可设定只有某些用户才具有对指定存储过程的使用权。

存储过程的实际应用

在退卡中我用到了存储过程,下面就以退卡为例。

创建一个存储过程

<span style="font-family:KaiTi_GB2312;font-size:18px;">create  procedure proc_CloseCard  --创建存储过程
@cardId varchar(10),@closeCardUserId varchar(10) --定义参数
as
begin
--在退卡表中插入数据
insert into t_CloseCard(cardId,closeCash,registryDate,registryTime,isChecked,registryUserId) 
select cardId ,balance ,date,time, isChecked ,userId  from t_card where cardId =@cardId
--将卡表中的相关卡删除
delete from t_card where cardId=@cardId
--对退卡表进行更新
update t_closecard set closeuserId =@closeCardUserId  where cardId =@cardId 
end</span>

退卡D层对存储过程的调用

<span style="font-family:KaiTi_GB2312;font-size:18px;">' <summary>
    ' 添加退卡信息
    ' </summary>
    ' <param name="_enCloseCardEntity">退卡实体类</param>
    '<returns>插入成功返回True,失败返回False</returns>
    Public Function AddCloseCard(ByVal enCloseCardEntity As CloseCardEntity) As Boolean
        Dim sqlHelper As New SQLHelper '实例化SQLHelper
        'SQL语句
        Dim cmdText As String = "proc_CloseCard"
        '定义命令类型,存储过程
        Dim cmdType As CommandType
        cmdType = CommandType.StoredProcedure
        '定义参数数组
        Dim sqlParams As SqlParameter()
        '给参数数组赋值
        sqlParams = {New SqlParameter("@cardId", enCloseCardEntity.cardId),
                     New SqlParameter("@closeCardUserId", SharedUserId.userId)}
        Return sqlHelper.ExecuteNoQuery(cmdText, cmdType, sqlParams)
    End Function</span>
用存储过程进行操作的结果和用SQL语句的结果是一样的。只是一个SQL语句写在了数据库端,一个写在了编译端。

用过以后就会发现存储过程其实挺简单的。但是听师傅说存储过程是面向过程的,不符合面向对象的思想。以后还是少用。但是现在处于学习阶段,用用也是好的,最起码要会用。在实践中不断进步。






 

你可能感兴趣的:(数据库,存储)