在机房重构过程中七层的主线明白了以后就剩下大量的敲代码了,这一过程无疑比较枯燥,因此有必要在机房中尝试一些新东西,比如,存储过程。
那么什么是存储过程呢?
存储过程是存放在服务器上的预先编译好的SQL语句,在第一次执行时进行语句检查和编译,编译好的存储过程在高速缓存中用于后续调用,这样就可以使存储过程执行时更加迅速,更加高效。存储过程可以带有输入和输出的参数。
自己的简单理解就是,将要执行的SQL语句写进数据库里,用的时候直接赋参调用就OK了。
存储过程有何好处?
1、复用性强。存储过程可以重复使用,从而减少数据库开发的工作量。
2、提高执行效率。存储过程在创建的时候就进行了编译以后每次执行时都不需要重新编译,执行时比一般SQL语句更快,提高了效率。
3、减少网络流量。存储过程位于服务器上,调用的时候只需要传递存储过程的名称以及参数就可以了,因此降低了网络传输的数据量。
4、更加安全。参数化查询过程可以防止SQL注入攻击。
如何创建?
如下图,在你数据库的可编程性中找到存储过程然后右击新建
如何写?
以存储过程为例,写入参数和SQL语句
USE [chargejf] GO /****** Object: StoredProcedure [dbo].[PRO_GroupParent] Script Date: 2016/3/5 16:48:20 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER procedure [dbo].[PRO_GroupParent] (@CmbName1 varchar(50), @CmbMark1 varchar(50), @txtContent1 varchar(50), @CmbRelation1 varchar(50), @CmbName2 varchar(50), @CmbMark2 varchar(50), @txtContent2 varchar(50), @CmbRelation2 varchar(50), @CmbName3 varchar(50), @CmbMark3 varchar(50), @txtContent3 varchar(50), @tableName varchar(50)) AS declare @TempSQL varchar(2000) BEGIN SET @TempSQL = 'select * from ' +@tableName + ' where' +@CmbName1 +@CmbMark1 +char(39) +@txtContent1 +char(39) if @CmbRelation1 != '' BEGIN SET @TempSQL =@TempSQL +@CmbRelation1 +CHAR(32)+@CmbName2 +@CmbMark2 +CHAR(39) +@txtContent2 +CHAR(39) if (@CmbRelation2 is not null) BEGIN SET @TempSQL =@TempSQL +@CmbRelation2 +CHAR(32)+@CmbName3 +@CmbMark3 +CHAR(39) +@txtContent3 +CHAR(39) END END EXECUTE(@TempSQL) ENDD层调用
Dim cmdText As String Dim table As DataTable Dim sqlParams As SqlParameter() = {New SqlParameter("@CmbName1", Groupcheck.CmbName1), New SqlParameter("@CmbName2", Groupcheck.CmbName2), New SqlParameter("@CmbName3", Groupcheck.CmbName3), New SqlParameter("@CmbMark1", Groupcheck.CmbMark1), New SqlParameter("@CmbMark2", Groupcheck.CmbMark2), New SqlParameter("@CmbMark3", Groupcheck.CmbMark3), New SqlParameter("@txtContent1", Groupcheck.TxtContent1), New SqlParameter("@txtContent2", Groupcheck.TxtContent2), New SqlParameter("@txtContent3", Groupcheck.TxtContent3), New SqlParameter("@CmbRelation1", Groupcheck.CmbRelation1), New SqlParameter("@CmbRelation2", Groupcheck.CmbRelation2), New SqlParameter("@tableName", Groupcheck.DbName)} cmdText = "PRO_GroupParent" table = sqlHelper.ExecSelect(cmdText, CommandType.StoredProcedure, sqlParams) Return table之前有写过组合查询的博客,对比会发现存储过程的使用不过是将SQL语句移到了数据库中而已,用的时候再赋参调用,进行增删改查的一系列操作,从而提高执行效率和代码复用,并没有多么的难,所以,人啊,不要总是被懒惰吓倒——告诫自己~