存储过程--机房收费系统

简介: <h1><span style="font-size:24px">1、什么是存储过程?</span><span style="font-size:24px"> </span></h1> <p></p> <p style="line-height:24px"><span style="font-family:KaiTi_GB2312; font-size:18px"> 定义:</sp

1、什么是存储过程? 

 定义:

 存储过程是由流控制和SQL语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,应用程序使用时只要调用即可。

 在敲机房收费系统的注册窗体时,注册窗体如下:

 

点击存盘之后,需要进行的操作,将学生信息写入到T_Student表中,将卡的信息写入到T_Card表中,将充值信息写入到T_Recharge表中,如果是不适用存储过程的话,需要单独向表中写入三次数据,每次都有很多重复的对数据库进行操作的代码。而用了存储过程之后,只需要把相应的参数和语句写入到数据库的存储过程中去,在客户端直接调用即可。


2、怎样使用存储过程?

 以上面的注册为例,首先新建存储过程

 

数据库会自动弹出一个已经建好主要语句结构的存储过程,你只需要在里面添加参数和语句即可,存储过程代码如下:

USE [ChargeSystem]
GO
/****** Object:  StoredProcedure [dbo].[PROC_Register]    Script Date: 07/30/2014 21:30:47 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		<Author,,Name>
-- Create date: <Create Date,,>
-- Description:	<Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[PROC_Register]
	-- Add the parameters for the stored procedure here
	@stuID varchar(20),@stuName varchar(20),@stuSex varchar(4),@stuDepart varchar(20),@stuGrade varchar(20),@stuClass varchar(20),@stuNote varchar(50),
	@cardID varchar(10),@cardType varchar(20),@remainCash varchar(4),@registerAdmin varchar(10),@isChecked varchar(20),
	@userID varchar(11),@rechargeCash varchar(4)
AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;

    -- Insert statements for procedure here              
    insert into T_Student(stuID ,stuName ,stuSex ,stuDepart ,stuGrade ,stuClass ,stuNote ) values(@stuID ,@stuName ,@stuSex,@stuDepart,@stuGrade ,@stuClass ,@stuNote )
    insert into T_Card (cardID,stuID ,cardType ,remainCash ,registerDate ,registerTime ,registerAdmin ,isChecked ) values(@cardID ,@stuID ,@cardType ,@remainCash ,CONVERT (varchar(20),GETDATE(),120) ,CONVERT (varchar(20),getdate(),108) ,@registerAdmin ,@isChecked )
    insert into T_Recharge (cardID ,userID ,rechargeCash ,rechargeDate ,rechargeTime ) values (@cardID ,@userID ,@rechargeCash ,CONVERT (varchar(20),GETDATE(),120) ,CONVERT (varchar(20),getdate(),108)  )
	
END

写完之后,要执行成功之后才可以调用

DAL层调用代码

Public Function Register(ByVal enStudent As Entity.StudentEntity, ByVal enCard As Entity.CardEntity, ByVal userID As String, ByVal enRecharge As Entity.RechargeEntity) As Boolean Implements IRegister.Register
        Dim sqlHelper As New Sqlhelper   '实例化sqlHelper类
        Dim cmdType As CommandType = CommandType.StoredProcedure    '定义命令类型
        Dim cmdText As String = "PROC_Register"   '数据库执行字符串
        '传参
        Dim parameter As SqlParameter()
        parameter = {New SqlParameter("@userID", userID),
                     New SqlParameter("@stuName", enStudent.StuName),
                     New SqlParameter("@stuID", enStudent.StuID),
                     New SqlParameter("@cardID", enCard.CardID),
                     New SqlParameter("@stuSex", enStudent.StuSex),
                     New SqlParameter("@stuDepart", enStudent.StuDepart),
                     New SqlParameter("@stuGrade", enStudent.StuGrade),
                     New SqlParameter("@stuClass", enStudent.StuClass),
                     New SqlParameter("@stuNote", enStudent.StuNote),
                     New SqlParameter("@cardType", enCard.CardType),
                     New SqlParameter("@remainCash", enCard.RemainCash),
                     New SqlParameter("@rechargeCash", enRecharge.RechargeCash)}
        Return sqlHelper.ExcuteAddDelUpdate(cmdText, cmdType, parameter)   '返回执行的结果,成功True;否则,False
    End Function


3、为什么要使用存储过程?

  1、SQL语句执行时要先编译,然后再执行,存储过程就是编译好的一些SQL语句,应用程序需要时直接调用就行,所以存储过程比直接使用SQL语句的效率要高。

  2、当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。

 3、就比如说注册的时候,如果过程中出现了bug,那么你的调试工作的量会很大,而如果用存储过程的话,若是SQL语句的问题,那你就可以在一个地方对SQL语句进行调试。



相关文章
|
移动开发 监控 前端开发
从0-1的建设云上稳定性
本文将从前后端的视角整体看下我们在云上稳定性治理的一些路径和经验。首先从平台的系统架构模型出发,站在全局视角看下整个平台的风险。
|
存储 安全 网络安全
云计算与网络安全:构建安全的数字基石
在当今数字化时代,云计算与网络安全已成为支撑现代社会运行的两大关键技术支柱。本文深入探讨了云计算的基本概念、服务模型及其带来的优势,同时剖析了网络安全的重要性和面临的挑战。通过分析云服务中的数据保护措施、访问控制机制以及加密技术的应用,揭示了如何在享受云计算便利性的同时,确保信息的机密性、完整性和可用性。此外,本文还展望了未来云计算与网络安全技术的发展趋势,强调了技术创新对于提升数字安全性的核心作用。
108 3
|
人工智能 安全 中间件
SegmentFault 思否在 ApacheCon Asia 2022 议题全览
SegmentFault 思否在 ApacheCon Asia 2022 议题全览
221 0
SegmentFault 思否在 ApacheCon Asia 2022 议题全览
|
12天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1267 5
|
1天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!
|
11天前
|
机器学习/深度学习 人工智能 前端开发
通义DeepResearch全面开源!同步分享可落地的高阶Agent构建方法论
通义研究团队开源发布通义 DeepResearch —— 首个在性能上可与 OpenAI DeepResearch 相媲美、并在多项权威基准测试中取得领先表现的全开源 Web Agent。
1283 87