前言
在上一篇博客,我和大家分享了如何在组合查询中使用模板设计模式,已经子父窗体的继承,承接上篇博客,我给大家分享一下存储过程的使用!
了解
我们既然使用存储过程,我们首相要了解一下,它是什么?
存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。
其实我们在学习数据库的时候,都接触过存储过程,它和触发器很类似,说白了,就是一个封装好的sql语句和流程控制语句,存放数据库中,你使用的时候直接调用就可以了!
操作
很多小伙伴可能不知道去哪里找存储过程:
数据库——>机房数据库——>可编程性——>存储过程(如下图)
代码
这是我的存储过程的代码,供大家借鉴!
USE [数据库名字]
GO
/****** Object: StoredProcedure [dbo].[PROC_GroupCheck] Script Date: 2018/5/20 9:02:06 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: 刘兵
-- Create date: 2018-5-11
-- Description: 用于组合查询时和数据库交互
-- =============================================
ALTER PROCEDURE [dbo].[PROC_GroupCheck]
/**** 需要传递的参数 ****/
@cmbfiled1 varchar(20),
@cmbfiled2 varchar(20),
@cmbfiled3 varchar(20),
@sombol1 varchar(20),
@sombol2 varchar(30),
@sombol3 varchar(20),
@dtp1 varchar(20),
@dtp2 varchar(20),
@dtp3 varchar(20),
@cmbRelations1 varchar(20),
@cmbRelations2 varchar(20),
@tablename varchar(20)
AS
declare @TempSql varchar(500)
BEGIN
SET @TempSql='SELECT * FROM '+@tablename +' WHERE ' +@cmbfiled1+@sombol1+char(39) + @dtp1 + char(39)
if (@cmbRelations1!='')
BEGIN
SET @TempSql=@TempSql+@cmbRelations1+CHAR(32)+@cmbfiled2+@sombol2+CHAR(39)+@dtp2+CHAR(39)
if (@cmbRelations2!='')
BEGIN
SET @TempSql=@TempSql+@cmbRelations2+CHAR(32)+@cmbfiled3+@sombol3+CHAR(39)+@dtp3+CHAR(39)
END
END
EXECUTE(@TempSql)
END
D层代码
public DataTable TeamInQuiry(Entity.Line line)
{
SQLHelper sqlhelper = new SQLHelper();
string sql = "PROC_GroupCheck";
SqlParameter[] sqlParameters =
{
new SqlParameter ("@cmbfiled1",line.Filed1),
new SqlParameter ("@cmbfiled2",line.Filed2 ),
new SqlParameter ("@cmbfiled3",line.Filed3),
new SqlParameter ("@sombol1",line.Sybol1),
new SqlParameter ("@sombol2",line.Sybol2 ),
new SqlParameter ("@sombol3",line.Sybol3 ),
new SqlParameter ("@dtp1",line.Comdition1 ),
new SqlParameter ("@dtp2",line.Comdition2 ),
new SqlParameter ("@dtp3",line.Comdition3 ),
new SqlParameter ("@cmbRelations1",line .Relation1),
new SqlParameter ("@cmbRelations2",line.Relation2),
new SqlParameter ("@tablename",line .gettablename),
};
DataTable table = sqlhelper.ExecuteQuery(sql, sqlParameters, CommandType.StoredProcedure);
return table;
}
优点
大家看完上边的代码,不难看出,其实存储过程中的代码和我们在D层写的查询语言十分相似,但是我们为什么要是存储过程呢?
- 提高了代码的复用性
我们在数据库中写了一个存储过程,只要是符合这个SQL语句的功能实现,都可以直接调用,大大减少了我们开发的工作量,同时提高了代码的复用性!
- 执行速度快
数据库对存储过程进行预编译的,在首次运行一个存储过程时,查询优化器对其分析,优化,并给出系统表中的执行计划,所以速度相对较快!
- 减少网络流量
之所以会减少流量,是因为我们之前向数据库传输的是大段大段sql语句,而现在传输的只有一个调用语句!
- 安全
系统管理员通过对执行某一存储过程的权限进行限制,从而能够实现对相应的数据访问权限的限制,避免非授权用户对数据的访问,保证数据的安全。
后语
其实在组合查询的时候,我们不使用存储过程也可以实现查询的功能,但是对于新的事物,我们要勇于尝试,因为这就是学习!
希望本文对您有所帮助!
有什么不足!欢迎指正!
感觉不错可以赞一下哦!