Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.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# 未选择字段的SQL语句_C#_Asp.net_Sql_Sql Server_Database - Fatal编程技术网

C# 未选择字段的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

我有许多下拉列表,允许用户选择值。用户还可以选择保留一些未选中的下拉列表

我正在尝试构造一个SQL语句,它将显示所有结果,即使没有使用下拉列表。我尝试了以下操作,但未返回任何结果:

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:发布实际查询的内容。也就是说,你在传递什么价值观?另外,您确定有用于查询的数据吗。