C# 未选择字段的SQL语句
我有许多下拉列表,允许用户选择值。用户还可以选择保留一些未选中的下拉列表 我正在尝试构造一个SQL语句,它将显示所有结果,即使没有使用下拉列表。我尝试了以下操作,但未返回任何结果:C# 未选择字段的SQL语句,c#,asp.net,sql,sql-server,database,C#,Asp.net,Sql,Sql Server,Database,我有许多下拉列表,允许用户选择值。用户还可以选择保留一些未选中的下拉列表 我正在尝试构造一个SQL语句,它将显示所有结果,即使没有使用下拉列表。我尝试了以下操作,但未返回任何结果: string field1 = null; string field2 = null; using (SqlCommand command = new SqlCommand("SELECT * FROM Table WHERE ((@Field1 is null) OR (Field1=@Field1)) AND
string field1 = null;
string field2 = null;
using (SqlCommand command = new SqlCommand("SELECT * FROM Table WHERE ((@Field1 is null) OR (Field1=@Field1)) AND ((@Field2 is null) OR (Field2=@Field2))", connection))
{
command.Parameters.Add(new SqlParameter("@Field1", field1));
command.Parameters.Add(new SqlParameter("@Field2", field2));
}
有人能提出一些建议吗?我有太多的下拉列表,无法为每个未选择的组合生成SQL语句
编辑:
为了澄清,可以从下拉列表中获取“字段1”和“字段2”的值。然而,如果用户愿意,他可以不选择一个。因此,我想将SQL语句用于一般情况,如果用户不选择任何内容,则将显示所有结果。这可以通过写作来实现
其中性别=性别
在SQL Server中,但通过C执行时不会返回任何结果
command.Parameters.Add(new SqlParameter("@Field1", field1));
command.Parameters.Add(new SqlParameter("@Field2", field2));
对于SQL Server参数,在添加它们时,需要在参数名称前面加上@号。请参阅上面的更正代码
编辑:从您编辑的问题来看,您对数据库的查询可能有点偏离。如果您正在提供可选参数,那么在将它们添加到查询中时,您需要感到厌倦。这可能更像您想要的:
select *
from yourtable
where
((@Field1 is null) or (Field1 = @Field1)) and
((@Field2 is null) or (Field2 = @Field2))
您的查询应该类似于:
SELECT * FROM Table WHERE ( (@Field1 is null) or (Field1=@Field1)) AND ((@Field2 is null) or (Field2=@Field2))
对于那些没有选择任何内容的参数,请确保传入null…您确定要从中选择的表中列Field1有值Field1,而Field2有值Field2吗?它们没有这些值,但我正在尝试显示表中的所有结果。当我使用该代码在SQL Server中编写查询时,它的行为就好像忽略了“WHERE”子句,如果用户没有从下拉列表中选择某个内容,则我希望忽略该子句。您的参数命名不正确,请参阅下面Shark的答案。如果用户没有选择任何内容,请不要将任何内容分配给变量Field1或Field2。@muratgu-更新了我的代码以反映更改。恐怕仍然没有返回任何结果@Sean运行一个SQL跟踪,看看是什么查询访问了数据库。在看不到完整查询和驻留在其中的数据的情况下很难说出。@肖恩:您还在为参数指定Field1和Field2值吗?若用户并没有选择任何内容,那个么您应该分配null。@Sean muratgu是对的。如果您只分配了一个空白文本,那么它仍然不起作用。如果新参数为空,则不要传递它。@Shark更新了我的代码以反映更改。仍然没有返回任何内容。已更新我的代码以反映更改。仍然没有返回任何内容。@sean:发布实际查询的内容。也就是说,你在传递什么价值观?另外,您确定有用于查询的数据吗。