不论什么一个好的数据库,基本上都离不开存储过程。在学习使用存储过程的时候,这句话总是伴随着那些巨人的思想。
到底什么是存储过程,存储过程怎么用,存储过程又给数据库带来了什么优点呢?
……呃。蒜了吧,今天没网,我就不引用一些官方的话了。
首先来说说平时咱们是怎样訪问数据库的(这仅对我们这级别的小菜说):
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维护,代码看着正简洁了!从数据库的角度来看,存储过程是视线编译好的代码,所以每次运行就不用再进行编译了。这样查询起来就少用了些间和系统的开销,提高了查询效率。
这样,是不是非常方便呢?那肯定的呗!