存储过程2
来源:互联网 发布:大数据时代已经来临 编辑:程序博客网 时间:2024/06/07 09:09
在一篇博客中有人问我为什么要使用存储过程,两字儿:方便!(其实说实话就是想“偷懒”)
首先我们来了解什么是存储过程:
简单粗暴的解释:
有人说存储过程就是一堆SQL语句的合并,中间加点逻辑控制就好了。
文质彬彬的解释:存储过程是由一些SQL语句和控制语句组成的被封装起来的过程,它驻留在数据库中,可以被客户应用程序调用,也可以从另一个过程或触发器调用。它的参数可以被传递和返回。与应用程序中的函数过程类似,存储过程可以通过名字来调用,而且它们同样有输入参数和输出参数。
那么到底使用存储过程有什么优势呢?
1、如果有一个特别复杂的数据操作可能会连接很多张数据表,会涉及到多次连接数据库,但如果使用了存储过程的话就只需要连接一次就OK了。这样就提高了代码运行效率。
2、大家可能听过这样一句话“祸从口出,言多必失;言多必失”那么在写代码的时候与这两句话也有异曲同工之妙,如果多次连接数据库必定会增加代码出错的几率,如果使用了存储过程那么就大大降低了这种几率,所以使用存储过程提高了系统的稳定性。
3、数据与数据打交道的话,过程比程序要快很多。
4、同时也增强了安全性,可以防止SQL注入的问题
使用存储过程的缺点:
1、可移植性差;
2、占用服务器端较多资源,对服务器造成很大的压力;
3、可读性和维护性不好;
4、性能扩展性问题
所以说任何东西都是有两面性的,有好处必定会有不好的,存储过程需要慎用!
更为详尽的解释:
http://blog.csdn.net/jackmacro/article/details/5688687;
http://blog.csdn.net/seelye/article/details/8502660;
下面是我在机房重构结账那一块儿用到的存储过程,因为这在一块儿需要去多张更新结账以后的状态,如果不用存储过程需要去多张表中进行数据的修改,这样不仅麻烦而且还会增加代码的出错率,所以我毅然决然的选择存储过程;存储过程:
USE [charge_sys]GO/****** Object: StoredProcedure [dbo].[proc_Status] Script Date: 04/28/2017 17:09:14 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO-- =============================================-- Author:<name>-- Create date: <2017/4/25>-- Description:<结账以后修改充值表(status)、学生表(Ischeck)、退卡表(status)的结账状态>-- =============================================ALTER PROCEDURE [dbo].[proc_Status] -- Add the parameters for the stored procedure here@UserID int,@RemainCash int,@RechargeCash int,@CancelCash int,@AllCash int,@ADate dateASBEGIN-- SET NOCOUNT ON added to prevent extra result sets from-- interfering with SELECT statements.SET NOCOUNT ON; -- Insert statements for procedure hereupdate ReCharge_Info set status ='已结账' where userID=@UserID and status = '未结账'update student_Info set Ischeck = '已结账'where UserID = @UserID and Ischeck = '未结账'update CancelCard_Info set status = '已结账'where UserID =@UserID and status = '未结账'insert into CheckDay_Info (RemainCash,RechargeCash,CancelCash,AllCash,ADate,UserID) values(@RemainCash,@RechargeCash,@CancelCash,@AllCash,@ADate,@UserID)END
D层代码:
public int DCheckStatus(Model.CheckStatus checkstatus, int userID) { //slq语句 string sqlcheckstatus = "proc_Status"; SqlParameter[] para = { new SqlParameter("@RemainCash",checkstatus.RemainCsh), new SqlParameter ("@RechargeCash",checkstatus.RechargeCash), new SqlParameter ("@CancelCash",checkstatus.CancelCash), new SqlParameter ("@AllCash",checkstatus.AllCash), new SqlParameter ("@ADate",DateTime.Now), new SqlParameter ("@UserID",userID)}; int result; result = SqlHelper.ExecuteNonQuery1(sqlcheckstatus,CommandType.StoredProcedure, para); return result; }总结的还有很多不足,希望各位读者可以吝赐教,感谢您的阅读,我将会在您的点滴赐教中茁壮成长!
1 0
- 分页存储过程2
- 存储过程翻页2
- 2个存储过程
- 分页存储过程2
- 存储过程-2
- SQL 存储过程(2)
- 存储过程翻页2
- 存储过程2
- 分页存储过程2
- 存储过程2
- 存储过程2
- 存储过程2
- 存储过程2
- oracle存储过程2
- 存储过程分页2
- 存储过程2
- 存储过程示例2
- 存储过程2
- Java连接数据库 <JDBC>
- Linux进程调度和切换过程分析
- 南阳oj 366 全排列 D的小L
- mysql查询今天、昨天、7天、近30天、本月、上一月 数据
- mac/linux solr 安装测试 one
- 存储过程2
- jQuery来了--效果--隐藏和显示,淡入淡出,滑动
- 4810: [Ynoi2017]由乃的玉米田
- Linux下搭建vsftp服务器、java、mysql、activemq、zookeeper、nginx、redis环境
- Java多线程/并发15、保持线程间的数据独立:ThreadLocal应用
- FZU1019 猫捉老鼠 (BFS)
- 利用百度地图API实现百度地图坐标拾取
- ACM 扫雷
- 【Java学习笔记】15:线程的共享互斥