[表格]:![需要考虑的表格] [表格]
[表格]:
我有来自Access的这些表单。在这里,我正在开发asp.net上的搜索应用程序。我有2个重型数据库,具有相同的数据结构,其中一个数据库包含大约12000个字段,另一个数据库包含约9000条记录。我想用任何标准做搜索记录,比如
经销商编号= 3123且DLicenceNo = 3242314
在这里,我假设如果用户提供的字段文本只被视为搜索,而其他文本被忽略。
无论如何构建查询而不是使用long if子句?
答案 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 )