【问题标题】:Filter multiple columns in database过滤数据库中的多个列
【发布时间】:2017-11-03 16:31:06
【问题描述】:

列employee_id、last_name、first_name、reporting_to、official_start_time、employee_status、dept_name

Private Sub btnSearch_Click(sender As Object, e As EventArgs) 处理 btnSearch.Click

Dim strSELECT As String = 
    "SELECT * FROM [TABLENAME]WHERE last_name LIKE '"     
    & tbxLastName.Text.ToString() 
    & "%' AND first_name LIKE'" & tbxFirstName.Text.ToString() & "%' AND reporting_to LIKE '" 
    & tbxReportingTo.Text 
    & "%' AND employee_status = '" 
    & cbxEmpStatus.Items(cbxEmpStatus.SelectedIndex) & "'AND dept_name ='" 
    & cbxDeptName.Items(cbxDeptName.SelectedIndex).ToString &"';"
End Sub

通过单击按钮搜索,我想用输入项过滤我的数据。


我遇到的问题是,如果我将一个文本框留空,则查询无法解决此问题。下面我将放一个有人建议的示例代码,但我不知道如何实现它。

Public Function ReadRecords(ByVal strTblName As String,
    ByVal strColumns As String,
    ByVal strFilter As String,
    ByVal strSortOrder As String) As DataTable

    Dim dtRecords As New DataTable
    Dim strSQL As String

    If strColumns = String.Empty Then
        strSQL = "SELECT * FROM " + strTblName
    Else
        strSQL = "SELECT " & strColumns & " FROM " + strTblName
    End If

    If strFilter <> String.Empty Then
        strSQL = strSQL + " WHERE " + strFilter
    End If
    If strSortOrder <> String.Empty Then
        strSQL = strSQL + " ORDER BY " + strSortOrder
    End If

    dtRecords = ExecQuery(strSQL)
    Return dtRecords
End Function

下面我有一张示例数据库的图片[不要介意其中的列名] 我希望能够过滤例如所有包含 IT 作为部门的记录,同时还搜索姓氏的第一个字母假设W 所以我的查询的输出应该是员工 100 William ETC...

enter image description here

【问题讨论】:

  • 2 个语言标签都不正确,缺少正确的一个?
  • 这需要使用命令/参数对象来完成,目前你有SQL注入漏洞

标签: c# sql-server vba


【解决方案1】:

公共函数 ReadRecords(ByVal strTblName As String, ByVal strColumns 作为字符串, ByVal strFilter 作为字符串, ByVal strSortOrder As String) As DataTable

Dim dtRecords As New DataTable
Dim strSQL As String

If strColumns = String.Empty Then
    strSQL = "SELECT * FROM " + strTblName +" WHERE " 
Else
    strSQL = "SELECT " & strColumns & " FROM " + strTblName +" WHERE " 
End If

If strFilter <> String.Empty Then
    strSQL = strSQL + + strFilter
End If
If strSortOrder <> String.Empty Then
    strSQL = strSQL + strSortOrder
End If

dtRecords = ExecQuery(strSQL)
Return dtRecords

结束函数

你必须在 if 语句之前添加 WHERE 条件, 更新了你的代码,请测试一下。

【讨论】:

  • 这只是一个代码 sn-p 先生。错误是我无法使用第一个原始代码搜索数据库。如果您知道如何在其中实现我的第一个代码,则第二个代码只是一个指南。
【解决方案2】:

如果我没记错的话,您只需要使用% 运算符和LIKE 关键字即可。 您的查询应类似于 SELECT * FROM tableName WHERE columnName LIKE condition + %

【讨论】:

    猜你喜欢
    • 2017-11-27
    • 2020-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-03
    • 1970-01-01
    • 2018-01-25
    相关资源
    最近更新 更多