【问题标题】:Select Command with Multiple LIKEs选择具有多个 LIKE 的命令
【发布时间】:2012-11-02 14:45:19
【问题描述】:

功能

用户在 textboxA 中输入文本。 在数据库记录中搜索与用户输入相对应的 First Names AND Last Names。

问题:

看来我得到的结果只是搜索“名字”字段,而不是名字和姓氏字段

示例:

*搜索“Mike”返回:*

迈克·史密斯

迈克·琼斯

搜索“琼斯”:

迈克·琼斯没有归还

代码:

Protected Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles button1.Click

    If txtSearch.Text = "" Then

    Else

        Dim ConnString As String = System.Configuration.ConfigurationManager.ConnectionStrings("oakfratintdbConnectionString").ConnectionString
        Dim Conn As New SqlConnection(ConnString)
        Dim searchCMD As New SqlCommand("SELECT [FirstName], [LastName], [MidInitName], [NameSuffix], [NamePrefix], [DOB], [DOD], [BurialDate], [GeoDirection], [Space], [Lot], [Row], [IntermentSpec], [AddtlInfo] FROM [OFCInterments] WHERE ([FirstName] LIKE @FirstName)", Conn)
        Dim searchDT As DataTable = GetData(searchCMD)
        GridView1.DataSource = searchDT
        GridView1.DataBind()
    End If

End Sub

代码说明:

txtSearch 是用户的搜索输入

【问题讨论】:

  • 您的 WHERE 子句只查看 FirstName。

标签: asp.net sql search select gridview


【解决方案1】:

改变

SELECT [FirstName], [LastName], [MidInitName], [NameSuffix], [NamePrefix], [DOB], 
[DOD], [BurialDate], [GeoDirection], [Space], [Lot], [Row], [IntermentSpec], 
[AddtlInfo] FROM [OFCInterments] WHERE ([FirstName] LIKE @FirstName)

SELECT [FirstName], [LastName], [MidInitName], [NameSuffix], [NamePrefix], [DOB], 
[DOD], [BurialDate], [GeoDirection], [Space], [Lot], [Row], [IntermentSpec], 
[AddtlInfo] FROM [OFCInterments] WHERE ([FirstName] LIKE @FirstName or 
LastName like @LastName)

【讨论】:

    【解决方案2】:

    以下是调整了 WHERE 子句的 SQL 查询,让您可以灵活地仅按名字、仅按姓氏或两者进行搜索。

    SELECT [FirstName], [LastName], [MidInitName], [NameSuffix], [NamePrefix], [DOB], [DOD], [BurialDate], [GeoDirection], [Space], [Lot], [Row], [IntermentSpec], [AddtlInfo] FROM [OFCInterments] WHERE
        (@FirstName IS NULL OR [FirstName] LIKE @FirstName)
        AND (@LastName IS NULL OR [LastName] LIKE @LastName)
    

    通过这个查询,我假设如果用户搜索 FirstName: "Mike" 和 LastName: "Jones",则搜索结果应该只包含 "Mike Jones",而不是 "Mike Smith","Mike Jones ”和“保罗·琼斯”。

    请注意,如果您使用此方法,则需要确保在用户未提供标准值的情况下不要使用空字符串填充参数。或者,除了 null 之外,您还可以检查查询中的空字符串。

    【讨论】:

    • 您还可以使用LTRIMRTRIMNULLIF 函数包装参数,将空字符串视为NULL。例如:NULLIF(LTRIM(RTRIM(@LastName)), '')
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-04
    • 1970-01-01
    • 2013-09-30
    • 2015-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多