组合查询(存储过程+模板方法)

前言

组合查询做为查询的难点之一,没有一点点小思想是真的不好做。不过我们不在思想上作斗争,直接下手干就行了,不然永远会拖着,这样不但思想不高,行动也是个矮子。上篇博客为大家介绍了什么是存储过程,以及他的有点,这次我们做实例!!!模板方法相信大家都学过了设计模式,对模板方法也有一定的了解,毕竟我们在做项目的时候不止一次用到组合查询,所以利用模板方法做一个父类,其他子类直接就可以继承使用了。

存储过程

USE [Login]
GO
/****** Object:  StoredProcedure [dbo].[PROC_GroupCheck]    Script Date: 2019/6/30 16:10:51 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:	张家煦	<Author,,Name>
-- Create date: <Create Date,,>2019-6-25
-- Description:	<Description,,>组合查询时候进行数据交互
-- =============================================
ALTER PROCEDURE [dbo].[PROC_GroupCheck]
/*需要传递的参数*/
@cboField1 varchar(20),
@cboField2 varchar(20),
@cboField3 varchar(20),
@cboMark1 varchar(10),
@cboMark2 varchar(10),
@cboMark3 varchar(10),
@Content1 varchar(20),
@Content2 varchar(20),
@Content3 varchar(20),
@Relationship1 varchar(10),
@Relationship2 varchar(10),
@DbtableName varchar(20)
AS 
		declare @TempSql varchar(500)
BEGIN
		SET @TempSql='SELECT * FROM '+@DbtableName+' WHERE '+@cboField1+@cboMark1+char(39)+@Content1+char(39)

		if(@Relationship1 !='')
		BEGIN
			SET @TempSql =@TempSql+@Relationship1 +CHAR(32)+@cboField2 +@cboMark2+CHAR(39)+@Content2+CHAR(39)
			if(@Relationship2!='')
			BEGIN
			SET @TempSql=@TempSql+@Relationship2+CHAR(32)+@cboField3+@cboMark3+char(39)+@Content3+char(39)
			END
		
		END
ExECUTE(@TempSql)
END

 模板的创建

将所有组合查询窗体公用的代码放到父类,其余均在子窗体实现

实体层

 public  class GroupFindTemplate
    {
        public string cboField1 { get; set; }
        public string cboField2 { get; set; }
        public string cboField3 { get; set; }
        public string cboMark1 { get; set; }
        public string cboMark2 { get; set; }
        public string cboMark3 { get; set; }
        public string Content1 { get; set; }
        public string Content2 { get; set; }
        public string Content3 { get; set; }
        public string Relationship1 { get; set; }
        public string Relationship2 { get; set; }
        public string DbtableName { get; set; }

    }

D层

//实例化数据操作类,进行数据查询,并获取返回值 
SQLHelper sqlhelper = new SQLHelper();
        public DataTable GroupFindtemplate(Enitity.GroupFindTemplate groupfind)
        {
           SqlParameter[] sqlParams = { new SqlParameter("@cboField1", groupfind.cboField1),
                                         new SqlParameter("@cboField2", groupfind.cboField2),
                                         new SqlParameter("@cboField3", groupfind.cboField3),
                                         new SqlParameter("@cboMark1",groupfind.cboMark1),
                                         new SqlParameter("@cboMark2",groupfind.cboMark2),
                                         new SqlParameter("@cboMark3",groupfind.cboMark3),
                                         new SqlParameter("@Content1",groupfind.Content1),
                                         new SqlParameter("@Content2",groupfind.Content2),
                                         new SqlParameter("@Content3",groupfind.Content3),
                                         new SqlParameter("@Relationship1",groupfind.Relationship1),
                                         new SqlParameter("@Relationship2",groupfind.Relationship2),
                                         new SqlParameter("@DbtableName",groupfind.DbtableName)
            };
            //调用存储过程
            string sql = @"PROC_GroupCheck";
            DataTable table = sqlhelper.ExecuteQuery(sql, sqlParams, CommandType.StoredProcedure);
            return table;
        }

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值