传递参数,在整个系统中应该说是支柱了,利用三层编码,靠实体传递参数来实现这些功能,在机房收费系统中组合查询应该是比较麻烦的一部分吧!
像上图中的选择条件,组合起来的情况多种多样了,假如我一个一个去判断,可以想象情况有很多种,组合关系选择什么,查询条件是什么等等,但是对于每种查询条件都有共有的特性,那就是我们选择条件后都要去数据库进行查询,于是我想把查询条件保存到字符串中,靠传递查询字符串去更改D层内不断变化的查询语句
而对于字段名字,操作符 组合关系下的选项都是汉字,首先我要先将这些字段转换为相应的对应数据库的字段英文名字
'将选择的中文字符转变成字段名,方便在数据库中查询该信息 Public Function getFileName(ByVal GFN As String) As String Select Case GFN Case "卡号" Return "C_number" Case "上机日期" Return "L_onDate" Case "上机时间" Return "L_onTime" Case "机房号" Return "L_computer" Case "姓名" Return "L_name" Case "与" Return " and " Case "或" Return " or " Case Else Return "" End Select End Function
将这些字段转换成功后,我是利用组合关系框的选择或者是不选择进行判断的,分为几种情况,同时在不同的情况下判断字段名。操作符。查询内容是否为空 ,然后将获得的查询条件保存到定义好的变量中,进行传递! 这样看似很麻烦的查询也就变的简单了,我们只需要选择,至于选择的内容等不必管也可以查询出来, 我的代码如下:
Dim b1 As BLL.inquireOnLineState = New BLL.inquireOnLineState '实例化B层查询上机状态的类 '判断第一行文操作符,字段名,以及输入内容 是否为空 If comFileName1.Text = "" Then MsgBox("请选择要查询的字段名!", , "提示") comFileName1.Focus() Exit Sub End If '判断操作符输入是否为空 If comOperate1.Text = "" Then MsgBox("请选择操作符", , "提示") comOperate1.Focus() Exit Sub End If '判断查询内容是否为空 If txtContent1.Text = "" Then MsgBox("请输入要查询的内容", , "提示") txtContent1.Focus() Exit Sub End If Dim sqlString As String = Nothing '定义变量用来存放查询语句 '第二个组合关系为空不为空 下,的情况 If comRelation2.Text = "" Then If comRelation1.Text = "" Then sqlString = getFileName(comFileName1.Text) & " " & comOperate1.Text & " '" & txtContent1.Text & "'" Else '不为空时两种情况,第二行为空,不为空 If comFileName2.Text = "" And comOperate2.Text = "" And txtContent2.Text = "" Then sqlString = getFileName(comFileName1.Text) & "" & comOperate1.Text & "'" & txtContent1.Text & "'" Else '检测第二行的字段名不能为空 If comFileName2.Text = "" Then MsgBox("请选择第二行字段名!", , "提示") comFileName2.Focus() '字段获得焦点 Exit Sub End If '检测第二行操作符是否选择 If comOperate2.Text = "" Then MsgBox("请选择第二行操作符", , "提示") comOperate2.Focus() '获取焦点 Exit Sub End If '检测查询的内容是否输入 If txtContent2.Text = "" Then MsgBox("请输入第二行要查询的内容", , "提示") txtContent2.Focus() '获取焦点 Exit Sub End If sqlString = getFileName(comFileName1.Text) & " " & comOperate1.Text & "'" & txtContent1.Text & "'" & getFileName(comRelation1.Text) & " " & getFileName(comFileName2.Text) & " " & comOperate2.Text & "'" & txtContent2.Text & "'" End If End If Else If comFileName3.Text = "" And comOperate3.Text = "" And txtContent3.Text = "" Then '两行条件 sqlString = getFileName(comFileName1.Text) & " " & comOperate1.Text & "'" & txtContent1.Text & "'" & getFileName(comRelation1.Text) & " " & getFileName(comFileName2.Text) & " " & comOperate2.Text & "'" & txtContent2.Text & "'" Else '检测第三行的字段名不能为空 If comFileName3.Text = "" Then MsgBox("请选择第三行字段名!", , "提示") comFileName3.Focus() '字段获得焦点 Exit Sub End If '检测第3行操作符是否选择 If comOperate3.Text = "" Then MsgBox("请选择第三行操作符", , "提示") comOperate3.Focus() '获取焦点 Exit Sub End If '检测查询的内容是否输入 If txtContent3.Text = "" Then MsgBox("请输入第三行要查询的内容", , "提示") txtContent3.Focus() '获取焦点 Exit Sub End If '三行条件 sqlString = getFileName(comFileName1.Text) & " " & comOperate1.Text & "'" & txtContent1.Text & "'" & getFileName(comRelation1.Text) & " " & getFileName(comFileName2.Text) & " " & comOperate2.Text & "'" & txtContent2.Text & "'" & getFileName(comRelation2.Text) & " " & getFileName(comFileName3.Text) & "" & comOperate3.Text & "'" & txtContent3.Text & "'" End If End If '定义表来接受B层传递回来的数据 Dim Utable As DataTable = b1.inquireStateInfo(sqlString) '绑定数据到datagridview上 dgvOnLineInfo.DataSource = Utable If dgvOnLineInfo.Rows.Count < 1 Then MsgBox("没有您查询的信息!", , "提示") End If
此处对之前的代码做了修改,原因在于当我输入卡号的时候还好查询的字符串是C_number=1 我不知道这里怎么没有报错,还能执行,但是当我输入ASUS-PC时程序的错误就出现了,查询字符串传入的是L_computer=ASUS-PC 而错误提示是不存在列名ASUS 由此可以看出我在给字段赋值的时候出现了错误,正常应该是L_computer="ASUS-PC" 因此,我将字符串的格式修改后就没有报错了。