Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 创建仅在值不为空/null时运行的WHERE函数_C#_Sql_Methods_Visual Studio 2013_Where Clause - Fatal编程技术网

C# 创建仅在值不为空/null时运行的WHERE函数

C# 创建仅在值不为空/null时运行的WHERE函数,c#,sql,methods,visual-studio-2013,where-clause,C#,Sql,Methods,Visual Studio 2013,Where Clause,因此,我目前正在visual Studio 2013上使用C和SQL制作somewith,并希望制作一个表单,其中有几个文本框用于输入每个字段/列的搜索条件,以帮助更快地在数据库中查找记录 用户可以在任意多的字段/框中输入值。但是,我不确定如何为它编写WHERE语句。 我知道如果我执行WHERE FirstName=操作,它将不会显示任何内容,这意味着我必须在上面附加WHERE 我想这不是一个好主意,有这样的东西 public void QueryName(string FN, string L

因此,我目前正在visual Studio 2013上使用C和SQL制作somewith,并希望制作一个表单,其中有几个文本框用于输入每个字段/列的搜索条件,以帮助更快地在数据库中查找记录

用户可以在任意多的字段/框中输入值。但是,我不确定如何为它编写WHERE语句。 我知道如果我执行WHERE FirstName=操作,它将不会显示任何内容,这意味着我必须在上面附加WHERE

我想这不是一个好主意,有这样的东西

public void QueryName(string FN, string LN,etc,etc)
"SELECT * FROM Table WHERE "
IF(FirstName != "") THEN
+ "FirstName = 'FN'" + IF(LastName != "") THEN
+ "LastName = 'LN'"
由于它会被破坏,我假设如果它后面有一个WHERE,后面没有任何内容,并且我不能从WHERE开始每个append部分,因为用户决定了它搜索的值

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


如果我把任何人弄糊涂了,我会尽力解释。

你可以这样做:

SELECT * FROM Table WHERE (FirstName = '' OR FirstName = @FirstName) AND (LastName = '' OR LastName = @LastName
select * from YourTable a
where (isnull(@FirstName, '') = '' or a.FirtName = @FirstName) and 
      (isnull(@LastName, '') = '' or a.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";
}

您可以使用如下查询:

SELECT * FROM Table WHERE (FirstName = '' OR FirstName = @FirstName) AND (LastName = '' OR LastName = @LastName
select * from YourTable a
where (isnull(@FirstName, '') = '' or a.FirtName = @FirstName) and 
      (isnull(@LastName, '') = '' or a.LastName = @LastName);
此代码isnull@FirstName,将检查提供的值是否为null,然后将其设为空,否则将其保留。然后检查它是否为空。因此,如果该条件通过,那么它将永远不会尝试与FirstName列进行比较