2012-11-14 55 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