组合查询=模板方法模式+存储过程

前言

组合查询为什么难,我个人认为是运用到了语句的拼接、存储过程的使用、设计模式的运用,这方面的知识在平时运用的不多,大家不够熟悉,所以认为比较难。下面我带大家一点一点去剖析。

模板方法模式

模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

个人理解:比如考试,每个同学拿到的试题是一样的,但是交卷之后老师要进行批改,为什么要批改呢?是因为每个人的答案不一样。试题是父类,每个人的答案是子类。可以变相的认为每一道题是一个虚方法,学生答题之后即对父类中的虚方法进行重写。

存储过程

定义:Stored Procedure是在大型数据库系统中,一组为了完成特定功能的SQL语句集,存储过程在数据库中,经过第一次编译后调用不需要再次编译,用户通过指定存储过程中的名字并给出参数(如果该存储过程带有参数)来执行它。

通俗解释:存储过程就是一个语句集,在使用的时候只需要指定存储过程名,给参数就可以使用。(注意:如果小伙伴们要创建存储过程,需要把alter改成create)

USE [charge_sys]
GO
/****** Object:  StoredProcedure [dbo].[PROC_GroupFind]    Script Date: 2019/2/15 18:33:15 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[PROC_GroupFind]
@CmbName1 varchar(50),
	@CmbName2 varchar(50),
	@CmbName3 varchar(50),
	@CmbOper1 varChar(10),
	@CmbOper2 varChar(10),
	@CmbOper3 varChar(10),
	@CmbGroup1 varchar(50),
	@CmbGroup2 varchar(50),
	@GetDataTable varchar(50),
	@txtInfo1 varchar(50),
	@txtInfo2 varchar(50),
	@txtInfo3 varchar(50)
	AS
	declare @TempSql varchar(500)
	BEGIN
	SET @TempSql='Select * from '+@GetDataTable+' Where'+CHAR(32)+@CmbName1+@CmbOper1 +CHAR(39)+@txtInfo1 +CHAR(39)
	if (@CmbGroup1!='')
	BEGIN
		SET @TempSql =@TempSql +CHAR(32) +@CmbGroup1 +CHAR(32)+@CmbName2 +@CmbOper2 +CHAR(39)+@txtInfo2 +CHAR(39)
		if (@CmbGroup2!='')
		begin
		SET @TempSql =@TempSql +CHAR(32)+@CmbGroup2 +CHAR(32)+@CmbName3 +@CmbOper3 +CHAR(39)+@txtInfo3 +CHAR(39)
	end
 
    END
    exec(@TempSql)
END

组合查询——逻辑判断

 if (CmbRelation1.Text == "")
            {
                if (CmbName1.Text == "" || CmbMark1.Text == "" || txtInfo1.Text == "")
                {
                    MessageBox.Show("第一行查询条件为空,请添加条件");
                }
            }
            else if (CmbRelation1.Text != "")
            {
                if (CmbName1.Text == "" || CmbMark1.Text == "" || txtInfo1.Text == "" || CmbName2.Text == "" || CmbMark2.Text == "" || txtInfo2.Text == "")
                {
                    MessageBox.Show("第二行查询条件为空,请添加条件");
                }
            }

            else if (CmbRelation2.Text != "")
            {
                if (CmbName1.Text == "" || CmbMark1.Text == "" || txtInfo1.Text == "" || CmbName2.Text == "" || CmbMark2.Text == "" || txtInfo2.Text == "" || CmbName3.Text == "" || CmbMark3.Text == "" || txtInfo3.Text == "")
                {
                    MessageBox.Show("第三行查询条件为空,请添加条件");
                }
            }

感受

解决问题必备要求:思路清晰+不骄不躁+一步一个脚印

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值