首页 > 代码库 > 存储过程

存储过程

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

        究竟什么是存储过程,存储过程怎么用,存储过程又给数据库带来了什么好处呢?

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

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

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 CmdAsNewSqlCommand(SQLstring,DBConnection)    定义并初始化sqlcommand

换成存储过程:DimCmdAs 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 = http://www.mamicode.com/UserName        '给参数赋值>

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

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

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