2012-11-14 30 views
2

功能选择命令与多喜欢

用户输入文本到textboxA。 在数据库记录中搜索与用户输入相对应的名和姓。

问题:

看来我越来越只搜索“名”字段中的结果,而不是两个名字和姓氏字段

例子:

* 搜索“Mike”返回: *

迈克·史密斯

麦克·琼斯

一种 “琼斯” 搜索:

麦克·琼斯没有返回

CODE:

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是用户的搜索输入

+0

你的WHERE子句只看名字。 – PaulMcG

回答

3

变化

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) 
1

下面是与SQL查询的WHERE子句调整,以使您能够灵活仅通过名字,姓氏或两者进行搜索。

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) 

与此查询我正在做的假设,如果名字的用户搜索:“迈克”和名字:“琼斯”,搜索结果只应包含“麦克·琼斯”,而不是“迈克·史密斯” ,“迈克琼斯”和“保罗琼斯”。

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

+0

您也可以用'LTRIM','RTRIM'和'NULLIF'函数来包装参数,以将空字符串视为NULL。例如:'NULLIF(LTRIM(RTRIM(@LastName)),'')' – Alexander