存储过程

来源:互联网 发布:房地产数据网 编辑:程序博客网 时间: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语句是第一条查询,第二条要使用查询结果的话,就不用定义参数直接定义变量进行赋值查询


【总结】

推荐一篇博客:存储过程详解

原创粉丝点击