Подстановочный знак в запросе для ASP.NET GridView

Я использую 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 )

person user49722    schedule 11.03.2009    source источник
comment
Боже всемогущий, не могли бы вы хотя бы попытаться поставить пробелы между словами?   -  person Rex M    schedule 11.03.2009
comment
Да, я скопировал вопрос в блок ответов, чтобы переформатировать большую его часть.   -  person Benjamin Autin    schedule 11.03.2009


Ответы (3)


Ваш запрос:

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 '' соответствует только пустой строке.

person Benjamin Autin    schedule 11.03.2009

VisitorMaster.NameofVisitor, например @NameofVisitor + '%'

person Shawn    schedule 11.03.2009

попробуйте вместо этого "NameOfVisiotr Like 'A%'

person WebMatrix    schedule 11.03.2009