存储过程
来源:互联网 发布:房地产数据网 编辑:程序博客网 时间:2024/06/07 23:12
【前言】
以前学习的时候接触过存储过程,当时没有认真的研究它,只知道有这么个东西,现在就听我来唠叨一下存储过程
【正文】
Why?
当涉及到多条SQL语句的时候,就可以使用存储过程,但也要适当的使用
优点:
1.提高运行速度
2.增强了SQL的功能、灵活性和代码的重用性
3.降低网络的通信量。存储过程位于服务器上,调用的时候只需要传递存储过程的名称以及参数就可以了,因此降低了网络传输的数据量。
4.间接实现安全控制功能
缺点:
若一个程序系统中大量使用存储过程,如果在后期需求变化时导致数据结构
发生变化,就会发生问题,而且后期系统维护也会非常困难,代价也是非常大的。
What?
存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。只是用来完成数据查询、数据处理操作,不可用来创建数据库对象的语句
How?
1.建立存储过程
2.编写存储过程
USE [JF]GO/****** Object: StoredProcedure [dbo].[PROC_Register] Script Date: 2017-05-31 15:24:28 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO-- =============================================-- Author:<牛千千>-- Create date: <2017-05-29>-- Description:<注册 上机卡,同时处理 Card、Recharge、Student表>-- =============================================ALTER PROCEDURE [dbo].[PROC_Register]-- 为存储过程添加参数@CardNo char(10),@CardStudentNo char(10),@CardCash char(10),@CardType char(10),@CardDate date,@CardTime Time(0),@CardIsCancel char(10),@CardIscheck char(10),@CardUserID char(10)ASBEGIN-- 添加SQL语句insert into Card_Info (cardNo,cash ,type ,date ,time ,isCancel,isCheck,userID ,studentNo )values(@CardNo,@CardCash,@CardType,@CardDate,@CardTime,@CardIsCancel,@CardIscheck,@CardUserID,@CardStudentNo)update Student_Info set cardNo=@CardNo WHERE studentNo=@CardStudentNoinsert into ReCharge_Info(cardNo,userID,rechargeCash,date,time)values(@CardNo,@CardUserID,@CardCash,@CardDate,@CardTime)END
存储过程写好了,要在数据库中执行一下,以后就可以用了。
3.在VS中调用存储过程:
Public Function AddCard(card As Entity.RegisterCardInfo) As Integer Implements IDAL.RegisterICard.AddCard Dim sqlHelper As New SqlHelper.SqlHelper Dim sqlHelper1 As New SqlHelper.SqlHelper Dim sqlHelper2 As New SqlHelper.SqlHelper Dim int As New Integer Dim sql As String Dim sqlParams As SqlParameter() = {New SqlParameter("@CardNo", card.CardNo), New SqlParameter("@CardStudentNo", card.StudentNo), New SqlParameter("@CardCash", card.Cash), New SqlParameter("@CardType", card.Type), New SqlParameter("@CardDate", card.CardDate), New SqlParameter("@CardTime", card.CardTime), New SqlParameter("@CardIsCancel", card.IsCancel), New SqlParameter("@CardIsCheck", card.IsCheck), New SqlParameter("@CardUserID", card.UserID)} 'sql = "Insert into Card_Info (cardNo,cash ,type ,date ,time ,isCancel,isCheck,userID ,studentNo )values(@CardNo,@CardCash,@CardType,@CardDate,@CardTime,@CardIsCancel,@CardIscheck,@CardUserID,@CardStudentNo)" sql = "PROC_Register" '应用存储过程 int = sqlHelper.ExecAddDelUpdate(sql, CommandType.StoredProcedure, sqlParams) Return int End Function
如果不用存储过程的话,这里的代码就会很多
注意:
在不使用存储过程的时候,红框里面为CommandType.Text
如果你的存储过程中的SQL语句是第一条查询,第二条要使用查询结果的话,就不用定义参数直接定义变量进行赋值查询
【总结】
推荐一篇博客:存储过程详解
阅读全文
0 0
- 存储过程
- 存储过程
- 存储过程
- 存储过程
- 存储过程
- 存储过程
- 存储过程
- 存储过程
- 存储过程
- 存储过程
- 存储过程
- 存储过程
- 存储过程
- 存储过程
- 存储过程
- 存储过程
- 存储过程
- 存储过程
- 南阳理工oj 题目85 有趣的数 Cantor数表
- 第一篇博客
- 【J2EE规范】什么是JNDI
- UESTC 1635 琵琶弦上说相思,当时明月在,曾照彩云归 拓扑排序、bfs
- js 获取选中某列的和遇到的一系列问题
- 存储过程
- angularJs中ng-readonly和ng-disabled的区别
- 还原乘式
- 更改Android Studio的主题背景
- linux下GPRS模块使用AT命令实现拨接电话,发中英文短信
- 【剑指offer-解题系列(31)】 连续子数组的最大和
- java 单链表反转详解
- 快速幂取模算法
- linux命令