2

[形式]: ![要考虑的形式][形式]

[形式]:访问表格

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

经销商编号 = 3123 和 DLicenceNo = 3242314

在这里,我假设如果用户提供了一个字段文本,那么它只被认为是搜索,而其他的则被忽略。

无论如何要为此构建查询而不是使用长 if 子句?

4

4 回答 4

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 注入的所有担忧。

于 2012-07-27T05:53:18.623 回答
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')

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

于 2012-07-27T04:17:46.753 回答
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
于 2012-07-27T04:16:32.070 回答
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 )
于 2012-07-27T20:02:53.077 回答