您的位置:首页 > 其它

传参轻松实现组合查询---机房个人版

2013-08-07 10:55 387 查看
       传递参数,在整个系统中应该说是支柱了,利用三层编码,靠实体传递参数来实现这些功能,在机房收费系统中组合查询应该是比较麻烦的一部分吧! 


像上图中的选择条件,组合起来的情况多种多样了,假如我一个一个去判断,可以想象情况有很多种,组合关系选择什么,查询条件是什么等等,但是对于每种查询条件都有共有的特性,那就是我们选择条件后都要去数据库进行查询,于是我想把查询条件保存到字符串中,靠传递查询字符串去更改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


注释:对于上述代码还需要注意一点那就是and 和or  我在运行时,每次组合关系选择and  或or  都会出错,于是我在and 和or 的前后加了空格就好了,原因是: 我在运行时,or 和and 连接 两个不同的查询条件 在我没有加入空格时,例如我想查两个卡号条件下的内容  查询字符串就会是C_numberandC_number   ,很明显的看出,没有空格时根本无法判断出条件是and ,因此会报错。

将这些字段转换成功后,我是利用组合关系框的选择或者是不选择进行判断的,分为几种情况,同时在不同的情况下判断字段名。操作符。查询内容是否为空  ,然后将获得的查询条件保存到定义好的变量中,进行传递! 这样看似很麻烦的查询也就变的简单了,我们只需要选择,至于选择的内容等不必管也可以查询出来, 我的代码如下:

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"  因此,我将字符串的格式修改后就没有报错了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: