动态创建sql文件框条目的条件

时间:2016-09-05 08:22:36

标签: sql where dynamic-sql

我正在开发一个C#桌面应用程序。我想创建一个搜索功能。现在问题是我使用了大约8个文本框。可以填充文本框的不同排列,并且生成的文本框中包含'条件应仅包括那些非null的文本框值。现在,一种可悲的方式是使用一个“如果”和“其他”的方式。这显然是费力的。还有其他办法吗?

2 个答案:

答案 0 :(得分:0)

只需要一个填充WHERE的查询就可以使用所有这样的参数

select ...
from ...
WHERE
    (firstNameColumn=:firstNameParam or :firstNameParam is null)
AND (lastNameColumn=:lastNameParam or :lastNameParam is null)
AND (...)

答案 1 :(得分:0)

我想首先检查是paramtere null,然后用它来与列值进行比较。

由于您在C#中生成查询,请尝试使用默认条件where 1=1的明期中的旧中文方法,以避免检查您是否已经有了第一个条件:)

string query = "select ... from ... join ... on ... where 1=1";
//suposedly you have value of one search box in variable called "item_name"
if(string.IsNullOrWhiteSpace(item_name) == false)
{
  query += " and Order_Line.Name ='" + item_name + "'";
}

以及其他领域。

你要做的是为了避免ifs不是一个好方法。看看这个:

string query = " select ... where Order_Line.Name = '" + item_name + "'";

如果item_name实际为空,那么结果字符串是什么?

编辑:结果查询将是

where Order_Line.Name = '' or Order_Line.Name is null

这不是你想要的。如果该搜索字段为空,则需要每一行,并且它不应该对搜索产生影响。这就是为什么你需要条件才能看到你将首先在where子句中包含这一列。