【问题标题】:Wildcard in query for ASP.NET GridViewASP.NET GridView 查询中的通配符
【发布时间】:2009-03-11 02:40:24
【问题描述】:

我在 ASP.NET 2.0 中使用 GridView。我想根据我的搜索条件(访客姓名、护照号码、公司名称)在 GridView 中显示 3 个表(SQL2005)的详细信息。它正在工作,但我想使用通配符通过“访客姓名”的第一个字母进行搜索。我在 GridView 的 QueryBuilder 中有我的代码(使用配置数据源)。查询如下:

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 )

【问题讨论】:

  • 全能的上帝,您至少可以尝试在您的单词之间添加空格吗?
  • 是的,我将问题复制粘贴到答案块中只是为了重新格式化很多内容。

标签: asp.net sql gridview


【解决方案1】:

您的查询是:

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 在 TSQL 中的优先级高于 OR

正确地,您的 WHERE 子句应该是:

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

并将 % 附加到您传入的 @NameofVisitor 和 @NameofCompany 参数中。按照 Shawn 或 WebMatrix 建议的方式执行此操作将使您匹配所有内容,如果您不传入某些内容,而 LIKE '' 仅匹配空字符串。

【讨论】:

    【解决方案2】:

    VisitorMaster.NameofVisitor like @NameofVisitor + '%'

    【讨论】:

      【解决方案3】:

      尝试” NameOfVisiotr 喜欢 'A%' 代替

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-10-13
        • 2021-05-22
        • 2016-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-05
        相关资源
        最近更新 更多