创建一个仅在值不为空/空时运行的WHERE函数

时间:2017-01-23 00:02:25

标签: c# sql methods visual-studio-2013 where

所以我现在正在视觉工作室2013上使用C#和SQL制作一些内容,并希望制作一个表单,其中有几个文本框用于输入每个字段/列的搜索条件,以帮助查找记录。数据库更快。

用户可以根据需要在任意数量的字段/框中输入值。但是,我不确定如何为它编写WHERE语句。 我知道,如果我做WHERE FirstName =''它不会显示任何东西,这意味着我必须附加WHERE。

我认为拥有类似的东西不是一个好主意 public void QueryName(字符串FN,字符串LN等) " SELECT * FROM Table WHERE" IF(FirstName!="")然后 +" FirstName =' FN'" + IF(LastName!="")然后 +"姓氏=' LN'"

因为它会破坏(我假设)如果它有一个WHERE后面没有任何东西,并且我不能从每个附加部分开始作为" WHERE"当用户决定搜索的值时。

所以我正在寻找的是一种使用多个用户选择值在C#中创建SQL语句的方法,而不会比它需要更长,更复杂。

如果我对任何人感到困惑,我会尽力解释。

2 个答案:

答案 0 :(得分:1)

您可以这样做:

SELECT * FROM Table WHERE (FirstName = '' OR FirstName = @FirstName) AND (LastName = '' OR LastName = @LastName

这种方法可能会导致一些性能问题。

我更喜欢使用C#构建sql查询来识别用户想要应用的过滤器,如:

var sql = "SELECT * FROM Table WHERE 1 = 1 /* Just to not care about if the where clause is needed */";

if (!String.IsNullOrWhiteSpace(FirstName))
{
    sql += " AND FirstName = @FirstName ";
}

if (!String.IsNullOrWhiteSpace(LastName))
{
    sql += " AND LastName= @LastName";
}

答案 1 :(得分:0)

您可以使用以下查询:

select * from YourTable a
where (isnull(@FirstName, '') = '' or a.FirtName = @FirstName) and 
      (isnull(@LastName, '') = '' or a.LastName = @LastName);

此代码isnull(@FirstName, '') <> ''将检查提供的值是否为null,然后将其设为空,否则不管它。然后检查它是否为空。因此,如果此条件通过,则永远不会尝试与FirstName列进行比较。