【机房重构】—模板方法+存储过程简单实现组合查询

时间:2022-09-16 11:18:27

     前两天没有敲机房,今天终于把组合查询做完了,就还剩下上下机和结账了,好开心呀,我终于快要做完了!

     上篇博客中已经简单介绍了存储过程,今天就不做介绍了,那就让我们重温一下模板方法吧!


【定义】

      模板方法模式(TemplateMethod),定义一个操作中的算法的股价,而将一些步骤延迟到自雷中。模板方法在子类中可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。


【结构类图】


【机房重构】—模板方法+存储过程简单实现组合查询



【模板方法应用】

      我们将组合查询中不变的东西定义成模板方法,然后将具体实现不同,但骨架相同的部分定义为PrimitiveOperation方法。

      分析组合查询后的类图:


【机房重构】—模板方法+存储过程简单实现组合查询


     其中公共的部分就是查询时的查询条件是否为空,以及两个组合关系是否为空的判断,还有就是将查询结果导出为Excel。

     而需要重写的就是将查询结果显示到DataGridView中,以及将选择框下的汉字转换成数据库中的英文字段。 

     这是模板方法在机房收费系统中的应用。


【存储过程的运用】

     在上网查资料的时候,对于查询数据库这块,有的人用的拼接字符串,有的用的存储过程。前两天刚研究了一些存储过程,所以准备用存储过程。

     首先创建存储过程:

Create procedure InquireWorkLogInfo
(@Field1 char(10),
@Operator1 char(10),
@Content1 char(20),
@Relation1 char(10),
@Field2 char(10)=default,
@Operator2 char(10)=default,
@Content2 char(20)=default,
@Relation2 char(10),
@Field3 char(10)=default,
@Operator3 char(10)=default,
@Content3 char(20)=default)
as
begin
declare @SQL varchar(2000)
select @SQL='select * from T_WorkLogInfo where '+ @Field1 +@Operator1 +@Content1
if @Relation1 !=''
select @SQL=@SQL+@Field2 +@Operator2+@Content2
if @Relation2 !=''
select @SQL=@SQL +@Field3 +@Operator3+@Content3

exec(@SQL)
end

    其次,执行存储过程

    最后,D层使用存储过程

    

   Public Function <span style="font-family: KaiTi_GB2312;">Group</span><span style="font-family: KaiTi_GB2312;">InquireWorkLog(ByVal enGroupInquire As Entity.GroupInquireEntity) As DataTable Implements IGroupInquireDAL.SelectGroupWorkLog</span>
Dim cmdText As String
Dim sqlhelper As New SqlHelperDAL
Dim dtSQL As DataTable
Dim sqlParams As SqlParameter()

Dim cmd As SqlCommand = New SqlCommand("InquireWorkLogInfo")
cmdText = cmd.CommandText

sqlParams = {New SqlParameter("@Field1", enGroupInquire.Field1),
New SqlParameter("@Operator1", enGroupInquire.Operator1),
New SqlParameter("@Content1", enGroupInquire.Content1),
New SqlParameter("@Relation1", enGroupInquire.Relation1),
New SqlParameter("@Field2", enGroupInquire.Field2),
New SqlParameter("@Operator2", enGroupInquire.Operator2),
New SqlParameter("@Content2", enGroupInquire.Content2),
New SqlParameter("@Relation2", enGroupInquire.Relation2),
New SqlParameter("@Field3", enGroupInquire.Field3),
New SqlParameter("@Content3", enGroupInquire.Content3),
New SqlParameter("Operator3", enGroupInquire.Operator3)}

dtSQL = sqlhelper.ExecuteSelect(cmdText, CommandType.StoredProcedure, sqlParams)
Return dtSQL

End Function

    到现在,一个组合查询轻轻松松的就完成了。


【总结】

     在看到组合查询的时候就想到使用模板方法,可是一时不知道如何去运用,上网查了一些资料,看了看同学们的博客,然后开始自个捣鼓。刚开始觉得很难,其实当做完了之后,瞬间觉得就这么回事儿啊,听简单的。

     所以说,当我们遇到问题的时候不要怕,勇敢的去做,要不然你会失去很多。例如我,刚开始做机房的时候,不敢开始,也就是拖了好久才开始,也是最近这十几天才认真投入进去,现在觉得不就是个机房收费系统嘛,也没啥!现在看着大家的进度都挺快的,而我还在这慢悠悠的走着,我也挺着急的。我把大把大把的时间用在了害怕困难上,失去的是最珍贵的时间,也无法挽回了,还好现在懂得了这个道理。着急也没用,还是要脚踏实地的去做,多提高自己的学习效率,还好在实习的这段日子里,我最大的收获就是提高了学习效率。

                                          I believe I can do it !