如何在asp.net中设计搜索多个字段

时间:2012-07-27 04:00:49

标签: c# asp.net sql sql-server

[表格]:![需要考虑的表格] [表格]

[表格]:Access Form

我有来自Access的这些表单。在这里,我正在开发asp.net上的搜索应用程序。我有2个重型数据库,具有相同的数据结构,其中一个数据库包含大约12000个字段,另一个数据库包含约9000条记录。我想用任何标准做搜索记录,比如

经销商编号= 3123且DLicenceNo = 3242314

在这里,我假设如果用户提供的字段文本只被视为搜索,而其他文本被忽略。

无论如何构建查询而不是使用long if子句?

4 个答案:

答案 0 :(得分:2)

可能需要进行一些调整,但首先要将所有文本框控件命名为数据库中的列名

var conditionals = new Dictionary<string, string>();

foreach(Control c in Page.Controls)
{
    if (c is TextBox)
    {
        if (!String.IsNullOrEmpty(c.Text))
            conditionals.Add(c.Id, c.Text);
    }
}

从那里你可以非常小心地构建一个只有基于你的条件字典的where子句的查询。理想情况下,您可以确保参数化一些如何避免SQL注入的所有后顾之忧。

答案 1 :(得分:1)

我使用存储过程,传递参数默认值,如下所示:

select field1,field2,... from table1 where 
(dealer_number= @dealer_number or @dealer_number='0')
and (d_licence_no=@d_licence_no or @d_licence_no='0')

如果您没有为此搜索使用某些参数,只需发送其默认值,该条件将被忽略。

答案 2 :(得分:0)

您可以使用Sql Case声明,它们易于管理, 查询可以像

declare @SearchItem varchar(50);
declare @SearchValue int;

SELECT column1, column2
FROM table
WHERE
@SearchValue = 
  CASE @SearchItem 
      WHEN 'Dealer Number' THEN ''
      WHEN 'DLicenceNo ' THEN ''

  END

答案 3 :(得分:0)

将存储过程与所有搜索条件一起用作sp参数,并在不想应用任何条件时将其传递为null。 sp将是

Create procedure usp_search
(
   @dealerNumber int=null,
    @licenseNumber int=null
)
as 
select * from table where
dealerNumber= isnull(@dealerNumber,dealerNumber)
and licenseNumber = isnull(@licenseNumber ,licenseNumber )