zoukankan      html  css  js  c++  java
  • 存储过程

            不论什么一个好的数据库,基本上都离不开存储过程。在学习使用存储过程的时候,这句话总是伴随着那些巨人的思想。

            到底什么是存储过程,存储过程怎么用,存储过程又给数据库带来了什么优点呢?

            ……呃。蒜了吧,今天没网,我就不引用一些官方的话了。

            首先来说说平时咱们是怎样訪问数据库的(这仅对我们这级别的小菜说):

    1.创建数据库连接对象(顺便把数据库连接字符串放进去)——sqlconnection

    2.连接数据库——conn.open()

    3.创建可以运行sql语句的对象运行sql语句——sqlcommand

            这是三步走,可是这种话,假设有一天要对SQL语句进行改动。而软件已经公布了,这该怎么办呢?

    那么大家试试存储过程吧,存储过程就是把SQL语句写在数据库那边,无论软件有没有公布,你想什么时候改都能够的,这样是不是更好维护了呢?那肯定的呗!并且这又降低了给程序员带来的一些负担了,由于假设SQL语句写在代码里面。要是写错了,那么软件执行測试的时候还得去调试改改,可是要是用存储过程。保存的时候正确就正确,错误就执行不了。多方便啊,并且有时候你须要进行复合查询,还得写一串老长的SQL语句,在代码里看着就受不了。

    还有的就是你要仅仅行某个业务。可是这个业务须要调取好几张表进行查询等操作,你可能要调用好几个类,这几个类分别负责訪问某个表,这样多麻烦啊,那就用用存储过程吧,你仅仅要提前把须要查询的哪几张表的几条SQL语句都写好了。到时候仅仅需调用一个类。并且非常大窜的SQL语句都不用写了,直接调用存储过程即可了。

    以下我们就试试存储过程吧!

            首先我们要创建一个存储过程

    create procedure Pro_Checkout   --创建名字为“pro_Checkout”的存储过程
    @UserName varchar(20)   --在存储过程里面要传进来的一个參数
    as
    begin       --要运行的语句
        update Balance_Info set CheckoutStatus ='已结账' whereUserName=@UserName and CheckoutStatus ='未结账'
        update Recharge_Info set CheckoutStatus ='已结账' whereRechargeUser =@UserName and CheckoutStatus ='未结账'
        update BackBalanceRecord_Info setCheckoutStatus ='已结账' whereBackCardTeacher =@UserName and CheckoutStatus ='未结账'
    end

            使用存储过程訪问数据库前两步跟之前的一样:

      

          Dim DBConectStr As NewConnectStringDAL     '数据库连接字符串类
          Dim DBConnection As NewSqlConnection(DBConectStr.ConnectString)    '创建数据库连接对象并初始化
          Dim Result As String 
          DBConnection.Open()     '连接数据库
       

    第三步,事实上就是把原来的第二部中的SQL语句部分换成存储过程的名字

    原来:Dim Cmd AsNewSqlCommand(SQLstring,DBConnection)     '定义并初始化sqlcommand

    换成存储过程:DimCmd As NewSqlCommand("Pro_Checkout",DBConnection)     '定义并初始化sqlcommand

            然后得告诉sqlcommand对象我们用的是存储过程,假设不说,他会默认的是以为用的是之前的方法。就把你的存储过程名字当作是SQL语句了。例如以下:

    <span style="white-space:pre">	</span>Cmd.CommandType= CommandType.StoredProcedure   '选择存储过程

            然后把參数放进去,这里的參数的意思就是你要查询某字段的内容。

    <span style="white-space:pre">	</span>Dim SQLParm AsNewSqlParameter("@UserName",SqlDbType.VarChar, 20) '加入參数
           <span style="white-space:pre">	</span>SQLParm.Value = UserName        '给參数赋值
           <span style="white-space:pre">	</span>Cmd.Parameters.Add(SQLParm)     '把參数给cmd
     <span style="white-space:pre">	</span>Result = Cmd.ExecuteNonQuery    <span style="color: green; background-color: white; background-position: initial initial; background-repeat: initial initial; ">'</span><span style="color:green;background:white;">运行存储过程的调用</span>

            这样运行之后,在第三步就会调用你刚才写好的存储过程了。

            假设是远程訪问数据库,这样不就降低了网络流量吗?还更加easy维护,代码看着正简洁了!从数据库的角度来看,存储过程是视线编译好的代码,所以每次运行就不用再进行编译了。这样查询起来就少用了些间和系统的开销,提高了查询效率。

            这样,是不是非常方便呢?那肯定的呗!

  • 相关阅读:
    binder机制理解
    Android 资源目录
    Andriod 构建项目流程
    dpi、ppi 、dp、sp、px、 pt相关概念
    短语、直接短语和句柄
    MySql优化
    java虚拟机内存管理
    redis
    linux——nginx的安装及配置
    linux——高级文本处理命令之wc、cut、sort
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/7217913.html
Copyright © 2011-2022 走看看