我是靠谱客的博主 发嗲曲奇,最近开发中收集的这篇文章主要介绍机房重构存储过程,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

之前只是听他们说存储过程,自己这次通过实践来学习。

1、何为存储过程

 存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。 
2、为何使用存储过程(正数为优点,负数为缺点)

       自己的感受:

      1)重复使用:就相当于定义了一个模块一样,只要调用它就可以实现某个功能,不用再写重复代码。

      2)参数少:因为是在数据库中,所以可以直接调用数据库中的数据,减少代码量。

      3)安全:防止了SQL注入。

     -1)调试困难:当有一处错误时后边很多地方报错,查看原因时会不清楚错误怎么改。

      更多原因:     

      4)减少网络流量。存储过程位于服务器上,调用的时候只需要传递存储过程的名称以及参数就可以了,因此降低了网络传输的数据量。
      5)安全性。参数化的存储过程可以防止SQL注入式攻击,而且可以将Grant、Deny以及Revoke权限应用于存储过程。
     -2)移植问题,数据库端代码当然是与数据库相关的。但是如果是做工程型项目,基本不存在移植问题。
     -3)重新编译问题,因为后端代码是运行前编译的,如果带有引用关系的对象发生改变时,受影响的存储过程、包将需要重新编译(不过也可以设置成运行时刻自动编译)。
     -4)如果在一个程序系统中大量的使用存储过程,到程序交付使用的时候随着用户需求的增加会导致数据结构的变化,接着就是系统的相关问题了,最后如果用户想维护该系统可以说是很难很难、而且代价是空前的,维护起来更麻烦。
3、使用存储过程需要注意什么——看代码注释
USE [charge]
GO
/****** Object:
StoredProcedure [dbo].[proc_Recharge]
Script Date: 11/23/2017 9:30:33 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:
<Author,,智雪艳>
-- Create date: <2017-11-23,,>
-- Description: <充值 Recharge,,>
-- =============================================
CREATE PROCEDURE proc_Recharge
--创建存储过程时格式应该是:CREATE PROCEDURE 名称;执行后会变成:ALTER PROCEDURE [dbo].[proc_Recharge]
--定义用到的变量
@cardno
char(11),
@userid char,
@rechargedate date,
@rechargemoney money,
@rechargetime time,
@ischeck bit,
@balance money
AS
--在存储过程中需要用到临时变量,临时变量的定义如下
declare
@remaincash money
BEGIN
--临时变量的赋值
set @remaincash =(select balance from Card_Info where cardno=@cardno );
--查找表里一个数据格式为select balance from Card_Info where cardno=@cardno
--添加充值表
insert into Rechargecash_Info(cardno ,userid ,rechargemoney ,rechargedate ,rechargetime,ischeck,balance )
values(@cardno,@userid ,@rechargemoney ,@rechargedate ,@rechargetime ,@ischeck ,@balance+@remaincash );
--更新卡表
Update Card_Info set balance =balance +@rechargemoney;
--更新学生表
select * from Student_Info where cardno=@cardno
Update Student_Info set balance =balance +@rechargemoney;
END



4、在D层调用存储过程

 '充值
Public Function IRecharge(RechargeInfo As E_RechargeEntity, CardInfo As E_CardEntity, StudentInfo As E_StudentEntity) As Boolean Implements I_RechargeIDAL.IRecharge
Dim SQLHelper As New SQLHelper()
Dim result As Boolean
'SQL语句,这里直接调用数据库中的存储过程
Dim sql As String = "proc_Recharge"
'增加充值记录
Dim Parameter As SqlParameter() = {New SqlParameter("@cardno", RechargeInfo.CardNo),
New SqlParameter("@userid", RechargeInfo.UserId),
New SqlParameter("@rechargedate", Now),
New SqlParameter("@rechargemoney", RechargeInfo.RechargeMoney),
New SqlParameter("@rechargetime", Convert.ToDateTime(Now).ToShortTimeString),
New SqlParameter("@ischeck", RechargeInfo.IsCheck),
New SqlParameter("@balance", RechargeInfo.RechargeMoney)}
result = SQLHelper.ExecNonQuery(sql, CommandType.StoredProcedure, Parameter)
Return result
End Function




最后

以上就是发嗲曲奇为你收集整理的机房重构存储过程的全部内容,希望文章能够帮你解决机房重构存储过程所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部