所以我现在正在视觉工作室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语句的方法,而不会比它需要更长,更复杂。
如果我对任何人感到困惑,我会尽力解释。
答案 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
列进行比较。