C# 创建仅在值不为空/null时运行的WHERE函数
因此,我目前正在visual Studio 2013上使用C和SQL制作somewith,并希望制作一个表单,其中有几个文本框用于输入每个字段/列的搜索条件,以帮助更快地在数据库中查找记录 用户可以在任意多的字段/框中输入值。但是,我不确定如何为它编写WHERE语句。 我知道如果我执行WHERE FirstName=操作,它将不会显示任何内容,这意味着我必须在上面附加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
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列进行比较