机房重构组合查询-储存过程
【摘要】
**前言:**在VB版本的时候实现组合查询使用sql语句的条件拼接完成的,因为vb版本的时候还没有使用分层的思想。还没有学习三层架构,再次重构的时候使用了三层架构与融合了设计模式进行实现的。并且还使用了在...
**前言:**在VB版本的时候实现组合查询使用sql语句的条件拼接完成的,因为vb版本的时候还没有使用分层的思想。还没有学习三层架构,再次重构的时候使用了三层架构与融合了设计模式进行实现的。并且还使用了在学习数据库视频时候学的储存过程:具体的存储过程介绍:https://blog.csdn.net/kangshihang1998/article/details/105821646 这篇博客总结了存储过程和触发器的对比。
以操作员工作记录为例:
UI界面
业务逻辑:
/// <summary>
/// 实例化工厂,用于创建D登录查询类。
/// </summary>
FactoryDAl fact = new FactoryDAl();
/// <summary>
/// 组合查询方法
/// </summary>
/// <param name="comf1">字段1</param>
/// <param name="comf2">字段2</param>
/// <param name="comf3">字段3</param>
/// <param name="comoper1">操作符1</param>
/// <param name="comoper2">操作符2</param>
/// <param name="comoper3">操作符3</param>
/// <param name="contetn1">内容1</param>
/// <param name="content2">内容2</param>
/// <param name="contetn3">内容3</param>
/// <param name="rel1">组合关系1</param>
/// <param name="rel2">组合关系2</param>
/// <param name="form">组合查询窗体</param>
/// <returns></returns>
public DataTable SelectGroupQuer(string comf1, string comf2, string comf3, string comoper1, string comoper2, string comoper3, string contetn1, string content2, string contetn3, string rel1, string rel2, string DbName, Form form)
{
DataTable SelectGroupQuerTable = new DataTable();
//调用接口与工厂
GroupQuerIDAL groupQuerIDAL = (GroupQuerIDAL)fact.CreateUser("GroupQuerDAL");
#region 第一组条件赋值
GroupQuery groupQuery = new GroupQuery();
groupQuery.Field1 =comf1;
groupQuery.Operator1 = comoper1;
groupQuery.Content1 = contetn1;
groupQuery.DbName = DbName;
#endregion
#region 第二组条件赋值
groupQuery.Relation1 =rel1;
groupQuery.Field2 = comf2;
groupQuery.Operator2 = comoper2;
groupQuery.Content2 = content2;
#endregion
#region 第三组条件赋值
groupQuery.Field3 = comf3;
groupQuery.Operator3 = comoper3;
groupQuery.Content3 = contetn3;
groupQuery.Relation2 = rel2;
#endregion
#region 组合查询逻辑
//判断第一个组合关系是否被选中
if (rel1.Trim()!="")//被选中
{
#region 判断第二个组合关系是否被玄宗
if (rel2.Trim()!="")//被选中
{
#region 判断所有控件内容是否为空
if (comf1.Trim() != "" && comoper1.Trim() != "" && contetn1.Trim() != "")
{
if (comf2.Trim() != "" && comoper2.Trim() != "" && content2.Trim() != "")
{
if (comf3.Trim() != "" && comoper3.Trim() != "" && contetn3.Trim() != "")
{
//查询具体内容
SelectGroupQuerTable = groupQuerIDAL.SelectGroupQuer(groupQuery);
}//第三组
}//第二组
}//第一组
#endregion
}
else
{
#region 判断前两组控件的内容是否为空
if (comf1.Trim() != "" && comoper1.Trim() != "" && contetn1.Trim() != "")
{
if (comf2.Trim() != "" && comoper2.Trim() != "" && content2.Trim() != "")
{
//查询具体内容
SelectGroupQuerTable = groupQuerIDAL.SelectGroupQuer(groupQuery);
}//第二组
}//第一组
#endregion
}
#endregion
}
else//没被选中
{
#region 判断第一组控件内容是否为空
if (comf1.Trim() != "" && comoper1.Trim() != "" && contetn1.Trim() != "")
{
//查询具体内容
SelectGroupQuerTable = groupQuerIDAL.SelectGroupQuer(groupQuery);
}
#endregion
}
#endregion
return SelectGroupQuerTable;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
DAL(与其它的一样)
还有DAL层调用储存过程与正常的sql语句一样,把储存过程的名字传到sqlherper助手类里。
不同的地方是sql语句类型从文本变成了CommandType.StoredProcedure 这个的具体解释是
传入的是一个存储过程类型sql语句。
储存过程:
USE [charging_system]
GO
/****** Object: StoredProcedure [dbo].[PROC_GroupCheck]
Script Date: 2020/5/5 20:14:14 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[PROC_GroupCheck]
-- Add the parameters for the stored procedure here
@DbName nvarchar(50),
@comboFields1 nvarchar(20),
@comboFields2 nvarchar(20),
@comboFields3 nvarchar(20),
@comboOperators1 nvarchar(10),
@comboOperators2 nvarchar(10),
@comboOperators3 nvarchar(10),
@textBox1 nvarchar(20),
@textBox2 nvarchar(20),
@textBox3 nvarchar(20),
@comboCheck1 nvarchar(10),
@comboCheck2 nvarchar(10)
AS
declare @TempSql varchar(500)--临时存放sql语句
--Char(32)是空格 插入(39)是单引号
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
if(@comboCheck1='')--初始化组合关系状态
set @comboCheck1=null
if(@comboCheck2='')
set @comboCheck2=null
--一个条件的查询
SET @TempSql='select * from '+@DbName+'
where'+char(32)+@comboFields1+@comboOperators1+char(39)
+@textBox1+char(39)
if(@comboCheck1 is not null)
begin
--两个条件的查询
SET @TempSql=@TempSql+char(32)+@comboCheck1+char(32)+@comboFields2+
@comboOperators2+
char(39)+@textBox2+char(39)
if(@comboCheck2 is not null)
begin
--三个条件的查询
SET @TempSql=@TempSql+char(32)+@comboCheck2+char(32)+@comboFields3
+@comboOperators3+
cha
r(39)+@textBox3+char(39)
end
end
execute(@Tempsql)
END
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
总结:
整个组合查询使用的是同一条业务线(就UI层不是同一个窗体),除了往储存过程中传的数据表名不一样外。其它的参数都是相同的。所以写一个组合查询通用的储存过程很重要,因为在储存过程中把需要查询的数据表名用参数代替了,这样就可以灵活替换具体的数据表了。
文章来源: kangshihang.blog.csdn.net,作者:康世行,版权归原作者所有,如需转载,请联系作者。
原文链接:kangshihang.blog.csdn.net/article/details/105937523
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)