机房重构之组合查询
来源:互联网 发布:网络加速器翻墙 编辑:程序博客网 时间:2024/04/28 05:20
在机房重构的过程中有个难点,那就是组合查询了。
还记得在第一次桥机房的时候,组合查询我是用的字符串的拼接,当时就感觉到字符串拼接比较费劲,需要很多情况的判断然后给出拼接的方式。而且很容易出错,这次我是用的存储过程。
PROCEDURE [dbo].[Query_OnOfftimerecord] @cboFieldA varchar(10), @cboOperatorA varchar(10), @txtConditionA varchar(10), @cboRelationA varchar(10), @cboFieldB varchar(10), @cboOperatorB varchar(10), @txtConditionB varchar(10), @cboRelationB varchar(10), @cboFieldC varchar(10), @cboOperatorC varchar(10), @txtConditionC varchar(10)--表名称或视图名称 ASdeclare @TempSql varchar(500)--临时存放sql语句 --CHAR(32)是空格,CHAR(39)单引号 BEGINset @TempSql='select * from CardRecord where '+CHAR(32) +@cboFieldA+@cboOperatorA+CHAR(39)+@txtConditionA+CHAR(39)+ CHAR(32)+@cboRelationA+CHAR(32)+ @cboFieldB+@cboOperatorB+CHAR(39)+@txtConditionB+CHAR(39)+ +CHAR(32)+@cboRelationB+CHAR(32) +@cboFieldC+@cboOperatorC+CHAR(39)+@txtConditionC+CHAR(39) execute (@TempSql) END
<pre name="code" class="vb">
</pre>组合查询中所有框的值,然后以字符串拼接的形式形成SQL语句,然后执行这个SQL语句。<br /><p></p><p><span style="font-size:24px"><span style="white-space:pre"></span>他的优点是通过传递所有参数,减少了逻辑的判断。</span></p><p><span style="font-size:24px"><br /></span></p><p><span style="font-size:24px"><span style="white-space:pre"></span>只分三种情况:</span></p><p><span style="font-size:24px"><span style="white-space:pre"></span>1、只有一个条件:则后两个条件则赋值成和第一个条件一样的条件,中间用and连接。</span></p><p><span style="font-size:24px"><span style="white-space:pre"></span>2、有两个条件:则最后一个条件和倒数第二个一样,中间用and连接。</span></p><p><span style="font-size:24px"><span style="white-space:pre"></span>3、三个条件:这个就是最好的情况,不用单独判断赋值了。</span></p><p><span style="font-size:24px">UI层<span style="white-space:pre"> </span></span></p><pre name="code" class="vb"><pre name="code" class="vb">Dim c1 As String Dim c2 As String Dim c3 As String Dim c4 As String Dim c5 As String Dim op1 As String Dim op2 As String Dim op3 As String Dim con1 As String Dim con2 As String Dim con3 As String Select Case Comfile1.Text Case "卡号" c1 = "CardId" Case "学号" c1 = "StuID" Case "上机时间" c1 = "Ontime" Case "下机时间" c1 = "StuSex" Case "用户ID" c1 = "UserID" Case "状态" c1 = "CardState" Case Else c1 = "" End Select Select Case Comfile3.Text Case "卡号" c3 = "CardId" Case "学号" c3 = "StuID" Case "上机时间" c3 = "Ontime" Case "下机时间" c3 = "StuSex" Case "用户ID" c3 = "UserID" Case "状态" c3 = "CardState" Case Else c3 = "" End Select Select Case Comfile2.Text Case "卡号" c2 = "CardId" Case "学号" c2 = "StuID" Case "上机时间" c2 = "Ontime" Case "下机时间" c2 = "StuSex" Case "用户ID" c2 = "UserID" Case "状态" c2 = "CardState" Case Else c2 = "" End Select Select Case Comyu1.Text Case "与" c4 = "and" Case "或" c4 = "or" Case Else c4 = "" End Select Select Case Comyu2.Text Case "与" c5 = "and" Case "或" c5 = "or" Case Else c5 = "" End Select Dim bll As New BLL.OnOfftime Dim dt As DataTable op1 = Comop1.Text op2 = Comop2.Text op3 = Comop3.Text con1 = txttext1.Text con2 = txttext2.Text con3 = txttext3.Text If c4 = "" Then//如果第一个组合关系为空,则给后面两个条件的所有控件的值赋成和第一个条件一样的 c4 = "and" c5 = "and" c2 = c1 op2 = op1 con2 = con1 c3 = c1 op3 = op1 con3 = con1 End If If c4 <> "" And c5 = "" Then//如果第一个组合关系有值,第二个没有,则把第三个条件赋成和第二个条件一样 c3 = c2 op3 = op2 con3 = con2 c5 = c4 End If dt = bll.zuheQueryrecord(c1, op1, con1, c4, c2, op2, con2, c5, c3, op3, con3) If dt.Rows.Count = 0 Then MsgBox("没有记录") Else DataGridView.DataSource = dt End If End Sub
DAL层
<pre name="code" class="vb"> Dim helper As New SqlHelper Dim dt As DataTable Dim textcmd As String = "Query_OnOfftimerecord" Dim sqlparmars As SqlParameter() = {New SqlParameter("@cboFieldA", c1), New SqlParameter("@cboOperatorA", c2), New SqlParameter("@txtConditionA", c3), New SqlParameter("@cboRelationA ", c4), New SqlParameter("@cboFieldB", c5), New SqlParameter("@cboOperatorB", c6), New SqlParameter("@txtConditionB", c7), New SqlParameter("@cboRelationB", c8), New SqlParameter("@cboFieldC", c9), New SqlParameter("@cboOperatorC", c10), New SqlParameter("@txtConditionC", c11)} dt = helper.ExecuteDataTable(textcmd, CommandType.StoredProcedure, sqlparmars) //调用存储过程Query_OnOfftimerecord Return dt
0 0
- 机房重构之组合查询
- 机房重构之组合查询
- 机房重构之组合查询
- 机房重构之组合查询
- 【机房重构】之组合查询
- 机房重构之组合查询
- 机房重构--组合查询
- 机房重构组合查询
- 机房重构-组合查询
- 重构机房组合查询之学生基本信息查询
- 走在机房重构的路上之组合查询
- 机房重构之模版方法模式-组合查询
- 机房重构之模版方法实现组合查询
- 【机房重构】组合查询之模板方法
- 机房重构组合查询之模板模式
- 【机房重构】-组合查询之模版模式
- 机房重构——组合查询
- 【机房重构】奋斗组合查询
- SequenceList(顺序表)
- Flume 1.5.2 User Guide
- 河南省ACM程序设计 物资调度
- 【leetcode】Spiral Matrix II
- swing awt可视化操作插件WindowBuilder的安装
- 机房重构之组合查询
- 7
- bzoj 4034: [HAOI2015]T2
- 搭配nodejs mongodb开发环境
- 一个html5页面的思考
- Git操作-标签
- 和为S的连续正数序列
- Merge Sorted Array —— Leetcode
- 1.3 Factory Method(工厂方法) -- 对象创建型模式