Подстановочный знак в запросе для ASP.NET GridView - PullRequest
1 голос
/ 11 марта 2009

Я использую GridView в ASP.NET 2.0. Я хочу показать детали из 3 таблиц (SQL2005) в GridView для моего поискового критерия (Имя посетителя, Номер паспорта, Название компании) Это работает, но я хочу использовать подстановочный знак для поиска по первой букве «Имя посетителя». У меня есть мой код в QueryBuilder в GridView (используя Configure Datasource). Запрос выглядит следующим образом:

SELECT FormMaster.NameofCompany, VisitorMaster.NameofVisitor,
VisitorMaster.PassportNumber, FormMaster.FormID,  
VisitorMaster.VisitorID FROM VisitorMaster INNER JOIN VisitorDetails ON
VisitorMaster.VisitorID = VisitorDetails.VisitorID INNER JOIN FormMaster ON
VisitorDetails.FormID = FormMaster.FormID WHERE (FormMaster.FormStatusID = 1) AND
(VisitorMaster.PassportNumber = @PassportNumber ) OR
(VisitorMaster.NameofVisitor = @NameofVisitor) OR
(FormMaster.NameofCompany = @NameofCompany )

Ответы [ 3 ]

1 голос
/ 11 марта 2009

Ваш запрос:

SELECT
  FormMaster.NameofCompany,
  VisitorMaster.NameofVisitor,
  VisitorMaster.PassportNumber,
  FormMaster.FormID,
  VisitorMaster.VisitorID
FROM
  VisitorMaster INNER JOIN VisitorDetails ON
    VisitorMaster.VisitorID = VisitorDetails.VisitorID
  INNER JOIN FormMaster ON VisitorDetails.FormID = FormMaster.FormID
WHERE
  (FormMaster.FormStatusID = 1) AND
  (VisitorMaster.PassportNumber = @PassportNumber ) OR
  (VisitorMaster.NameofVisitor = @NameofVisitor) OR
  (FormMaster.NameofCompany = @NameofCompany )

Вы уверены, что он работает правильно? Если FormMaster.FormStatusID не равно 1 и один из двух последних критериев верен, он все равно вернет эту строку. AND имеет более высокий приоритет, чем OR в TSQL.

Правильно, ваше WHERE предложение должно быть:

FormMaster.FormStatusID = 1 AND (
  VisitorMaster.PassportNumber = @PassportNumber OR
  VisitorMaster.NameofVisitor LIKE @NameofVisitor OR
  FormMaster.NameofCompany LIKE @NameofCompany)

И добавьте% к параметрам @NameofVisitor и @NameofCompany, которые вы передаете. Делая так, как предлагают Shawn или WebMatrix, вы сопоставите все, если не передадите что-то, тогда как LIKE '' соответствует только пустой строке.

0 голосов
/ 11 марта 2009

попробовать» NameOfVisiotr Мне нравится 'A%' вместо

0 голосов
/ 11 марта 2009

VisitorMaster.NameofVisitor как @NameofVisitor + '%'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...