vb.net机房收费系统—组合查询的实现

时间:2022-09-16 11:01:02

 

       组合查询一直是我一个头疼的事情,经过我不懈努力,终于在看了多次博客找了n多资料后实现了,现在拿出来和大家共享,希望大家指正!

首先是界面:

vb.net机房收费系统—组合查询的实现


然后我们分层来看,B层实现对汉字向英文字符的转换:

'/************************************************* 
'作者:许恕
'小组:
'说明:转换组合查询汉字为代码的类
'创建日期:2013.3.8
'版本号:v1.0.0
'*********************************************/

Public Class CombineCheckChangeStringBLL

' /// <summary>
' /// depiction:<改方法是转换上下机字符>
' /// </summary>
' /// <param name="<strCombineString>"><上下机实体></param>
' /// <returns>
' ///<返回上下机实体>
' /// </returns>
Public Function ChangeOnlineRecordString(strCombineString As Entity.CombineSelectEntity) As Entity.CombineSelectEntity
'转换字段
strCombineString.FieldName1 = ChangeOnlineRecordFieldName(strCombineString.FieldName1)
strCombineString.FieldName2 = ChangeOnlineRecordFieldName(strCombineString.FieldName2)
strCombineString.FieldName3 = ChangeOnlineRecordFieldName(strCombineString.FieldName3)
'装换操作符
strCombineString.OperationalChar1 = ChangeOperationalChar(strCombineString.OperationalChar1)
strCombineString.OperationalChar2 = ChangeOperationalChar(strCombineString.OperationalChar2)
strCombineString.OperationalChar3 = ChangeOperationalChar(strCombineString.OperationalChar3)
'转换关系符
strCombineString.Relationchar1 = ChangeRelationchar(strCombineString.Relationchar1)
strCombineString.Relationchar2 = ChangeRelationchar(strCombineString.Relationchar2)
Return strCombineString

End Function

' /// <summary>
' /// depiction:<改方法是转换上下机字符-字段>
' /// </summary>
' /// <param name="<strOnline>"><上下机字符></param>
' /// <returns>
' ///<返回上字符串>
' /// </returns>
Public Function ChangeOnlineRecordFieldName(strOnline As String) As String
Dim strOnlineReturn As String
Select Case strOnline
Case "卡号"
strOnlineReturn = "card_id"
Case "上机日期"
strOnlineReturn = "online_date"
Case "上机时间"
strOnlineReturn = "online_time"
Case "机房号"
strOnlineReturn = "computer_no"
Case Else
strOnlineReturn = ""
End Select
Return strOnlineReturn
End Function
' /// <summary>
' /// depiction:<改方法是转换字符-操作符>
' /// </summary>
' /// <param name="<strOnline>"><上下机字符></param>
' /// <returns>
' ///<返回上字符串>
' /// </returns>
Public Function ChangeOperationalChar(strChange As String) As String
Dim strRenturn As String
Select Case strChange
Case "大于"
strRenturn = " > "
Case "小于"
strRenturn = " < "
Case "等于"
strRenturn = " = "
Case "不等于"
strRenturn = " <> "
Case Else
strRenturn = " "
End Select
Return strRenturn
End Function

' /// <summary>
' /// depiction:<改方法是转换关系字符>
' /// </summary>
' /// <param name="<strOnline>"><上下机字符></param>
' /// <returns>
' ///<返回上字符串>
' /// </returns>
Public Function ChangeRelationchar(strChange As String) As String
Dim strRenturn As String
Select Case strChange
Case "并且"
strRenturn = " and "
Case "或者"
strRenturn = " or "
Case Else
strRenturn = ""
End Select
Return strRenturn
End Function
End Class
'/*************************************************
'作者:许恕
'小组:
'说明:上机事务的类
'创建日期:2013.2.28
'版本号:v1.0.0
'*********************************************/
Public Class OnlineBLL
' /// <summary>
' /// depiction:<改方法是组合查询上机信息>
' /// </summary>
' /// <param name="<checkString>"><组合查询实体></param>
' /// <returns>
' ///<返回datatable>
' /// </returns>
Public Function CombineCheckOnlineRecord(enCheckString As Entity.CombineSelectEntity) As DataTable
'改变组合查询的字符为英文
Dim ChangeStringBLL As New CombineCheckChangeStringBLL
enCheckString = ChangeStringBLL.ChangeOnlineRecordString(enCheckString)


'查询内容
Dim RecordFactory As New Factory.RecordFactory
Dim IOnlineRecordDAL As IDAL.IOnLineRecordSeverDAL
Dim OnlineDataTable As DataTable
IOnlineRecordDAL = RecordFactory.CreatOnLineRecordSeverDAL()
OnlineDataTable = IOnlineRecordDAL.CombineCheckOnlineRecord(enCheckString)


'返回查询到的内容
Return OnlineDataTable


End Function


End Class


放到DAL 层我们的实现就简单了,我们拼接字符串查询就可以了

Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports System.Configuration

'/*************************************************
'作者:许恕
'小组:
'说明:组合查询字符组合成sql的类
'创建日期:2013.3.9
'版本号:v1.0.0
'*********************************************/

Public Class GroupCombineSqlStringDAL

' /// <summary>
' /// depiction:<改方法是组合上机查询语句>
' /// </summary>
' /// <param name="<enCheckString>"><组合查询字符实体></param>
' /// <returns>
' ///<返回string>
' /// </returns>
Public Shared Function GroupOnlineSqlString(enCheckString As Entity.CombineSelectEntity) As String
Dim strSQL As String
strSQL = "Select * from T_OnLineRecord where " & enCheckString.FieldName1 & enCheckString.OperationalChar1 & " @SelectString1 "

If enCheckString.Relationchar1 = "" Then
Return strSQL
End If

strSQL = strSQL & enCheckString.Relationchar1 & " " & enCheckString.FieldName2 & enCheckString.OperationalChar2 & " @SelectString2 "

If enCheckString.Relationchar2 = "" Then
Return strSQL
End If

strSQL = strSQL & enCheckString.Relationchar1 & " " & enCheckString.FieldName2 & enCheckString.OperationalChar2 & " @SelectString2 "

Return strSQL

End Function
End Class

'/*************************************************
'作者:许恕
'小组:
'说明:对用户表操作的类
'创建日期:2013.2.28 16:00
'版本号:v1.0.0
'*********************************************/
Public Class SQLSeverOnLineRecordSeverDAL : Implements IDAL.IOnLineRecordSeverDAL
' /// <summary>
' /// depiction:<改方法是组合查询记录>
' /// </summary>
' /// <param name="<enCard>"><查询实体></param>
' /// <returns>
' ///<返回datatable>
' /// </returns>
Public Function CombineCheckOnlineRecord(enCheckString As Entity.CombineSelectEntity) As DataTable Implements IDAL.IOnLineRecordSeverDAL.CombineCheckOnlineRecord
'创建sqlhelper类
Dim userSqlHelper As New SqlHelper.SQLHelper

'sql语句
Dim strSql As String
Dim OnlineDataTable As DataTable


'Sql查询语句
strSql = GroupCombineSqlStringDAL.GroupOnlineSqlString(enCheckString)

'设置参数

Dim sqlParams As SqlParameter()
If enCheckString.Relationchar1 = "" Then
sqlParams = {
New SqlParameter("@SelectString1", enCheckString.SelectString1)
}
End If

If enCheckString.Relationchar2 = "" And enCheckString.Relationchar1 <> "" Then
sqlParams = {
New SqlParameter("@SelectString1", enCheckString.SelectString1),
New SqlParameter("@SelectString2", enCheckString.SelectString2)
}
End If

If enCheckString.Relationchar2 <> "" And enCheckString.Relationchar1 <> "" Then
sqlParams = {
New SqlParameter("@SelectString1", enCheckString.SelectString1),
New SqlParameter("@SelectString2", enCheckString.SelectString2),
New SqlParameter("@SelectString3", enCheckString.SelectString3)
}
End If


'执行
OnlineDataTable = userSqlHelper.ExecuteSelect(strSql, CommandType.Text, sqlParams)

Return OnlineDataTable
End Function
End Class


最后是结果:我们艰苦的奋斗有了结果:

vb.net机房收费系统—组合查询的实现