Обеспечение поиска объекта - PullRequest
0 голосов
/ 23 марта 2011

У меня есть веб-страница со следующими полями

name,address,post

с тремя текстовыми полями. Я хочу предоставить средство поиска пользователю. Если пользователь вводит только имя и нажимает кнопку поиска, поиск должен выполняться только по имени, если пользователь вводит значения для всех текстовых полей, он должен запросить базу данных со всеми 3 значениями. Как и в этом случае, как я могу написать sql-запрос для всех возможностей поиска?

Ответы [ 2 ]

1 голос
/ 23 марта 2011

Я предпочитаю эту опцию для запроса.Если пользователь вводит значение только в одно из полей, передайте значение null параметру других соответствующих полей.

Create PROCEDURE [dbo].[uspGetPeople]
@name varchar(50),
@Address varchar(200),
@Post varchar(5)
AS
SET NOCOUNT ON;
Select name, address, post 
from tblPeople 
where (name = @Name or @Name IS NULL) and
  (address = @Address or @Address IS NULL) and
  (post = @Post or @Post IS NULL)

Простой пример VB.NET для вызова хранимой процедуры:

Dim strName As String = NameTextBox.Value
Dim strAddress as string = AddressTextBox.Value
Dim strPost as string = PostTextBox.Value
Dim strSQL As String = "uspGetPeople"
Dim strConn As String = "My.Database.ConnectionString"
Dim cn As New SqlConnection(strConn)
Dim cmd As New SqlCommand(strSQL, cn)
cmd.CommandType = CommandType.StoredProcedure
If not string.isnullorempty(strName) then
    cmd.Parameters.AddWithValue("@Name", strName)
Else
    cmd.Parameters.AddWithValue("@Name", dbnull.value)
End if
If not string.isnullorempty(strPost) then
    cmd.Parameters.AddWithValue("@Post", strPost)
Else
    cmd.Parameters.AddWithValue("@Post", dbnull.value)
End if
If not string.isnullorempty(strAddress) then
    cmd.Parameters.AddWithValue("@Address", strAddress)
Else
    cmd.Parameters.AddWithValue("@Address", dbnull.value)
End if

Dim dr As SqlDataReader
Using cn
   cn.Open()
   dr = cmd.ExecuteReader
   While dr.Read
       'process records returned
       'dr("name")
       'dr("address")
       'dr("post")             
   End While
   cn.Close()
End Using
1 голос
/ 23 марта 2011
select *
from Table1
where
  (coalesce(@Name, '') = '' or Name = @Name) and
  (coalesce(@Address, '') = '' or Address = @Address) and
  (coalesce(@Post, '') = '' or Post = @Post)  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...