【新闻发布系统】——存储过程
来源:互联网 发布:mysql自动增长赋值 编辑:程序博客网 时间:2024/06/10 08:27
我们开发软件、进行编程,经常会和数据库打交道。最近在学习牛腩新闻发布系统的时候,其中提到了存储过程。在没接触存储过程之前,我还天真的认为:数据库的增删改查都是在代码中实现的。只要懂得增删改查的语句,基本上操作数据库就没有什么问题了。但是,这远未达到一个合格的程序员的标准。
一、定义
官方:存储过程(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参数的数据类型ASBEGIN --下边这三句现在还用不到,直接删掉-- 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)ASBEGIN--事务--更新学生表中的字段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 FunctionEnd Class
四、总结
- 【新闻发布系统】——存储过程
- 牛腩新闻发布系统——存储过程使用
- 牛腩新闻发布系统——存储过程
- 【牛腩新闻发布系统】——添加存储过程后重构SQLHelper
- 牛腩新闻发布系统——触发器和存储过程的区别
- 牛腩新闻发布系统笔记9:存储过程
- 牛腩新闻发布系统笔记11:存储过程的编写
- [ssh新闻发布系统三]存储新闻
- [ssh新闻发布系统三]存储新闻
- 新闻发布系统——个人见解
- 牛腩新闻发布系统——总结
- 牛腩新闻发布系统——触发器
- 牛腩新闻发布系统——总结
- 【新闻发布系统】——再回首
- 【牛腩新闻发布系统】——总结
- 【牛腩】——新闻发布系统收工
- 新闻发布系统——错误汇集
- 【牛腩新闻发布系统】——总结
- Python死锁问题查找
- EXC_BAD_ACCESS报错解决方法之--NSZombieEnabled
- Linux中构建NTP服务器
- 开通CSDN博客的第一天,为远逝的秋,成就心中所想。 .
- Themida和Winlicense加壳软件脱壳教程
- 【新闻发布系统】——存储过程
- 金属材料工程专业大学生个人职业生涯规划
- js 格式化时间日期函数
- (常复习)poj 1015 dp+记录dp路径+转变最优子结构+区间映射
- spring和cxf整合
- 得到包下所有类
- grep、cut常见用法
- oracle隔离级别
- Innodb独立的undo tablespace