【新闻发布系统】——存储过程

    我们开发软件、进行编程,经常会和数据库打交道。最近在学习牛腩新闻发布系统的时候,其中提到了存储过程。在没接触存储过程之前,我还天真的认为:数据库的增删改查都是在代码中实现的。只要懂得增删改查的语句,基本上操作数据库就没有什么问题了。但是,这远未达到一个合格的程序员的标准。


一、定义


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

    在现阶段,我们使用存储过程的情况看来,存储过程就是把一些SQL语句放到一起,进行执行,简化了D层的逻辑。


二、优缺点


1、优点

存储过程的能力大大增强了SQL语言的功能和灵活性。存储过程可以用流控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算

可保证数据的安全性和完整性:通过存储过程可以使相关的动作在一起发生,从而可以维护数据库的完整性。

2、缺点:

重新编译问题:当引用的对象发生改变时,存储过程需要进行重新编译

如果在一个程序系统中大量的使用存储过程,到程序交付使用的时候随着用户需求的增加会导致数据结构的变化,接着就是系统的相关问题了,最后如果用户想维护该系统可以说是很难很难、而且代价是空前的。维护起来更加麻烦!


三、使用


下边我以原来我们做过的机房收费系统中的充值操作为例:充值时,需要将充值记录写到充值表中,同时还要将学生表中的学生余额进行更新。


1、建立存储过程,在SQLServer中进行操作




添加完后,出现在你面前的是将是这个


-- =============================================
-- Author:		<Author,,Name>     作者姓名
-- Create date: <Create Date,,>    创建时间
-- Description:	<Description,,>    功能描述
-- =============================================
CREATE PROCEDURE <Procedure_Name, sysname, ProcedureName> 
    --Procedure_Name存储过程的名称
    
	-- Add the parameters for the stored procedure here
	--添加存储过程的参数(下边你将要用的参数)
	<@Param1, sysname, @p1> <Datatype_For_Param1, , int> = <Default_Value_For_Param1, , 0>, 
	<@Param2, sysname, @p2> <Datatype_For_Param2, , int> = <Default_Value_For_Param2, , 0>
	--@Param过程中的参数,Datatype参数的数据类型
AS
BEGIN
    --下边这三句现在还用不到,直接删掉
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;

    -- Insert statements for procedure here
    --这里就要写你的SQL语句
	SELECT <@Param1, sysname, @p1>, <@Param2, sysname, @p2>
END


2、编写存储过程


-- =============================================
-- Author:		杨晨光
-- Create date: <Create Date,,>
-- Description:	充值操作
-- =============================================
ALTER PROCEDURE [dbo].[PRO_charge] 
	--加入参数,参数是你下边要用到的
	@cardNo nchar(10),
	@chargeMoney nchar(10),
	@Teacher nchar(10),
	@checkState nchar(10),
	@Balance nchar(10)
AS
BEGIN		--事务
		
	--更新学生表中的字段
	update T_StudentInfo set Balance =@chargeMoney +Balance 
										 where cardNo=@cardNo
	--向充值表中添加一条记录
	insert into T_Recharge  (cardNo,chargeMoney,Teacher,checkState) 
										values (@cardNo,@chargeMoney,@Teacher,@checkState)
	
END

注:过程名[PRO_charge]:尽量以pro_或者proc_开头,不建议使用使用sp_为前缀,因为SQLServer系统的存储过程都是以sp_开头,这样在查找的时候会先查找系统自身的,降低查询速度。


3、使用:在D层中进行调用


Public Class RechargeDAL
    : Implements IRecharge
    '定义一个将充值记录写入充值表的函数,,,调用存储过程
    Public Function Save(user As Entity.RechargeEntity) As Boolean Implements IRecharge.Save
        '定义一个数据库操作的助手类
        Dim MySqlHelper As New SqlHelper
        '定义数据库操作的语句
        Dim strSql As String

        strSql = "PRO_charge"

        '加入参数
        Dim paras As SqlParameter() = {New SqlParameter("@cardNo", user.cardNo),
                                      New SqlParameter("@chargeMoney", user.chargeMoney),
                                       New SqlParameter("@Teacher", user.Teacher),
                                       New SqlParameter("@checkState", user.checkState)}

        Return MySqlHelper.ExecAddDelUpdate(strSql, CommandType.StoredProcedure, paras)
    End Function
End Class


剩下的U、B、接口、工厂都与原来相同。


四、总结


     任何东西给我们带来便利的同时,其身后必然隐藏着它的另一面。的确,使用存储过程会让我们的工作方便很多,但同时,我们也必须要认识到到过多的使用存储过程给我们带来的危害。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
第01讲-软件安装 第02讲-数据库设计1 第03讲-数据库设计2 第04讲-界面模拟图设计 第05讲-数据操作类设计 第06讲-编写SQLHelper 第07讲-编写类别操作类 第08讲-重构SQLHelper 第09讲-浅入浅出SQL注入 第10讲-建立新闻类别实体类 第11讲-浅入浅出SQL触发器 第12讲-编写新闻评论类 第13讲-浅入浅出存储过程 第14讲-重构SQLHelper2 第15讲-编写剩下的存储过程 第16讲-完成新闻操作类 第17讲-编写BLL层 第18讲-界面制作必备软件 第19讲-CSS简介 第20讲-CSS核心内容 第21讲-制作首页1 第22讲-制作首页2 第23讲-制作首页3 第24讲-首页制作4 第25讲-首页制作5 第26讲-制作母版页  第27讲-其他页面制作1 第28讲-其他页面制作2 第29讲-带边框的圆角框制作1 第30讲-带边框的圆角框制作2 第31讲-制作出错页 第32讲-可变宽度的圆角框制作1 第33讲-可变宽度的圆角框制作2 第34讲-完成类别管理页面制作 第35讲-完成界面制作 第36讲-整合首页1 第37讲-整合首页2 第38讲-整合新闻页 第39讲-整合搜索页 第40讲-整合新闻内容页1 第41讲-整合新闻内容页2 第42讲-整合新闻内容页3 第43讲-前台页面除错 第44讲-整合登陆页 第45讲-整合类别管理页1 第46讲-整合类别管理页2 第47讲-整合类别管理页3 第48讲-整合类别管理页4 第49讲-整合类别管理页5 第50讲-整合类别管理页6 第51讲-整合类别管理页7 第52讲-整合类别管理页8 第53讲-整合类别管理页9 第54讲-整合类别管理页10 第55讲-整合类别管理页11 第56讲-整合新闻管理页1 第57讲-整合新闻管理页2 第58讲-整合新闻管理页3 第59讲-整合添加新闻页1 第60讲-整合添加新闻页2 第61讲-尾声 第62讲-尾声续 第63讲-尾声最后续
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值