版权声明:本文为博主原创文章。未经博主同意不得转载。 https://blog.csdn.net/xdd19910505/article/details/35574125

一、使用背景

       机房收费系统结账的时候。需求是当选择一个用户。同一时候显示该用注冊、充值和退卡记录。这些数据来提供结账数据。而结账之后要同一时候更新卡、充值、退卡表三个表,假设直接写SQl语句的话会是非常复杂的。

而这些需求可以封装为一个存储过程,点击结账之后仅仅须要传入參数运行存储过程就可以。

            

二、存储过程简单介绍

      存储过程(Stored Procedure)是一组为了完毕特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出參数(假设该存储过程带有參数)来运行它。

存储过程是数据库中的一个重要对象,不论什么一个设计良好的数据库应用程序都应该用到存储过程。

            

三、存储过程的长处:

        1、封装事务规则。

        2、同意标准组件式编程

        3、可以实现较快的运行速度(批处理的T——SQL语句每次运行时都要进行编译和优化,存储过程是预编译)

        4、能过降低网络流量

        5、被作为一种安全机制来充分利用(避免非授权用户对数据的訪问)

             

四、在机房收费系统中的应用

       首先在数据库中建立存储过程

  

      语句:

<span style="font-size:14px;">-- =============================================
-- Author: <许丹>
-- Create date: <2014年6月28日>
-- Description: <结账同一时候更新卡表、充值表、退卡表>
-- =============================================
CREATE PROCEDURE [dbo].[Proc_PayAccounts]
-- Add the parameters for the stored procedure here
@strUserID char(6) --用户ID
AS
BEGIN
update Card_Info set BillStatus ='已结账' where UserID =@strUserID and BillStatus ='未结账'
update ReCharge_Info set Status ='已结账' where UserID =@strUserID and Status ='未结账'
update CancelCard_Info set BillStatus ='已结账' where UserID =@strUserID and BillStatus ='未结账'
END</span>

D层代码:

<span style="font-size:14px;"> Public Function SettleAccounts(ByVal euser As Entity.UserInfo) As Integer Implements IDAL.IUser.SettleAccounts

        Dim helper As New Helper.SqlHelper
Dim strSql As String = "Proc_PayAccounts" '声明并实例化存储过程
Dim sqlParams As SqlParameter() = {New SqlParameter("@strUserID", euser.UserID)} '声明并实例化參数数组
Return helper.ExecAddDelUpdate(strSql, CommandType.StoredProcedure, sqlParams) '运行并返回更新操作结果
End Function</span>

五、总结:

        1.存储过程目的在于可以方便的从系统表中查询信息或完毕于更新数据库表相关的管理任务。可以实现较快的运行速度假设某一操作包括大量T-SQL语句代码,分别被多次运行,那么存储过程要比批处理的运行速度快得多。

由于存储过程是预编译的,在首次运行一个存储过程时,查询优化器对其进行分析、优化并给出终于被存在系统表中的存储计划。

而批处理的T-SQL语句每次运行都须要预编译和优化,所以速度要慢一些。

       
2.使用存储过程,就是对数据库进行优化,从而达到提高系统运行速度。存储过程仅仅在创造时进行编译。以后每次运行存储过程都不需再又一次编译,而一般SQL语句每运行一次就编译一次,所以使用存储过程可提高数据库运行速度。

       3.当对数据库进行复杂操作时(如对多个表进行 Update,Insert,Query,Delete 时)。可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。这些操作。假设用程序来完毕,就变成了一条条的
SQL 语句,可能要多次连接数据库。而换成存储,仅仅须要连接一次数据库就行了。
        4.存储过程可以反复使用,可降低数据库开发者的工作量。
        5.安全性高,可设定仅仅有某此用户才具有对指定存储过程的使用权。

vb.net机房收费系统——存储过程的更多相关文章

  1. VB.NET 机房收费系统项目总结

    VB.NET机房收费系统项目总结 从2013年5月3日——2013年8月20日历时三个多月的.NET机房收费系统终于完成了.项目做完了,真有一种如释重负的感觉. 下面我将从文档.UML图,代码这三个方 ...

  2. 小结:VB.NET机房收费系统个人版

    经过几天的缝缝补补,自己的个人版最终OK了,!或许是由于有第一次的机房收费系统的经验,这次做,感觉很亲切. 在业务逻辑方面,沿袭曾经的逻辑.做了一点升级.可是修改不大. 在数据库方面,感觉自己从一个小 ...

  3. VB.NET机房收费系统总结

    总感觉这次机房收费系统非常有份量,一直没有下手总结,从2014-7-27至2014-9-29.这中间有太多故事和成长.首先说一下两次机房收费系统的不同,它是我们从面向过程向面向对象的一个转变.在.NE ...

  4. vb.net机房收费系统之组合查询

    我个人一直认为,组合查询是机房收费系统的一个难点,尤其是用到三层之后,如果要为组合查询中的每一个查询建立一个显然是太麻烦了. 下面介绍一下我的方法,对大家起个参考作用. 我将该表中可输入的内容定义为一 ...

  5. VB.NET<机房收费系统个人重构版>你都学会了什么(之五)

    接着上篇我们说的配置文件,今天我们来说一下接口. 1.UML图 2.三层架构 3.Sqlhelper 4.配置文件 5.接口 6.设计模式 什么是接口呢?我们可以将接口理解为用于沟通的中介的抽象化.可 ...

  6. 【vb.net机房收费系统】之sqlhelper 标签: 数据库 2015-05-17 10:47 819人阅读 评论(15)

    在敲机房收费重构版的时候,用到了sqlhelper,当时不知道怎么开始,各种听别人说,张晗说,一定要用sqlhelper,特别好用,我当时没有用balabala~当时一听,哎哎哎,这个高级,要搞一搞, ...

  7. 【vb.net机房收费系统】之没有包含要从继承的组件的已生成程序集 标签: vb.net继承 2015-05-02 15:19 1012人阅读

    在敲到组合查询这个功能的时候,需要用到窗体的继承,但是在新建继承窗体的时候,出现了错误(没有包含要从继承的组件的已生成程序集).如下图: 问题的产生:当时没怎么注意,也不知道怎么弄的,最后反正是继承上 ...

  8. vb.net机房收费系统之配置文件

    总是听到说用反射+配置文件访问数据库,那配置文件到底什么东西? 1.定义: 配置文件是标准的 XML 文件,XML 标记和属性是区分大小写的.它是可以按需要更改的,开发人员可以使用配置文件来更改设置, ...

  9. VB.NET版机房收费系统---报表

    报表,即报告情况的表格,简单的说:报表就是用表格.图表等格式来动态显示数据,可以用公式表示为:"报表 = 多样的格式 + 动态的数据". 在没有计算机以前,人们利用纸和笔来记录数据 ...

随机推荐

  1. selenium自动化方式爬取豆瓣热门电影

    爬取的代码如下: from selenium import webdriver from bs4 import BeautifulSoup import time #发送请求,获取响应 def get ...

  2. hdu 1505 && hdu1506 &&hdu 2830 && 2870 总结---------DP之状图选最大矩形

    /* 多谢了“闭眼,睁眼” 同学给我一套dp专题,不然真是没接触过这种题型. 做个4个简单的,很高兴有所收获. 2013-08-06 /* HDU 1506 最基础的一道题目,其主要精髓就在于两个数组 ...

  3. java多线程三种方式

    java多线程都有几种方式 有三种: (1)继承Thread类,重写run函数 创建: class xx extends Thread{ public void run(){ Thread.sleep ...

  4. spring四种依赖注入方式(转)

    spring四种依赖注入方式!! 平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提 ...

  5. @Service ,@Controller,@Component注解

    首先,在applicationContext.xml文件中加一行: <context:component-scan base-package="com.hzhi.clas"/ ...

  6. 为什么打不开IDEA或webStorm官方网页?

    为什么打不开IDEA或webStorm官方网页? 一.问题描述 idea和webStorm的官网:https://www.jetbrains.com/ 有时候打开idea的官网会出现无法访问的情况,页 ...

  7. python基础--模块的查找顺序以及相对导入和绝对导入

    模块:模块是一系列功能的结合体 模块的来源: 内置的模块(python解释器自带的) 第三方(开发者编写的模块) 自定义的模块(自己编写的模块) 模块的四种表现形式: 1.使用python编写的py文 ...

  8. <a>标签操作

    1.点击后onclick事件失效,变灰,不可用 onclick(this); //事件传递this对象 function viewMm(obj) { $(obj).removeAttr("o ...

  9. 计蒜客 Prefix Free Code(字典树+树状数组)

    Consider n initial strings of lower case letters, where no initial string is a prefix of any other i ...

  10. 精密MRAM芯片制造系统

    MRAM是一种非常复杂的薄膜多层堆叠,由10多种不同材料和超过30层以上的薄膜与堆叠组成,部分薄膜层的厚度仅达数埃,比人类的发丝还要薄500000倍,相近于一颗原子的大小,如何控制这些薄膜层的厚度.沉 ...