首页 > 解决方案 > 在 ASP.NET 参数化查询中插入“NULL”或“NOT NULL”

问题描述

我有一个用于过滤数据库结果的 asp DropDownList。我的过滤器之一用于检查列是 NULL 还是 NOT NULL:

<asp:DropDownList runat="server" id="activeFilter" CssClass="form-control"  AutoPostBack="false" >
  <asp:ListItem selected="True" value="">-- Filter By Active/Inactive </asp:ListItem>
  <asp:ListItem value="NOT NULL">Active</asp:ListItem>
  <asp:ListItem value="NULL">Inactive</asp:ListItem>
</asp:DropDownList>

然后我尝试将其插入到参数化查询中,如下所示:

//called from another method

string query = ".... AND Status=@statusFilter ...."
SqlConnection conn = new SqlConnection(connString)
SqlCommand command = new SqlCommand(query, conn)
command.Parameters.AddWithValue("@statusFilter", statusFilter.SelectedValue);

//other stuff, make sql call

此过程适用于其他过滤器值,例如

"... AND Name=@nameFilter ..."

nameFilter 可能是“John”、“Tim”、“Amy”等,所以我假设这与 NULL 和 NOT NULL 实际上不应该是字符串的事实有关。有什么简单的解决方案吗?我看到我可以添加 DBNull.Value 但是 NOT NULL 呢?

任何帮助将非常感激。

编辑: 对不起大家,我在第一篇文章中犯了一个错误——我复制了错误的查询字符串。我的查询字符串实际上是

"... AND Date_Completed IS @activeFilter ..." 

我知道我不能说 Column=Null,所以我再次道歉。我现在将浏览这些建议并更新每个人。

编辑 2: 好的,所以问题是您不能将 NULL / NOT NULL 视为参数。我希望我可以将它用作参数,因为我有许多实用函数可以根据许多不同的过滤器生成最终查询。最终,这不起作用,我需要更改我的方法并使用 If/Else 块直接插入整个“IS NULL”或“IS NOT NULL”。

标签: c#asp.nettsql

解决方案


这不会像每个人在评论中所说的那样工作。您可以执行 If 来查看选择的值,并且在 sql 查询中您可以使用 IS NULL 或 IS NOT NULL。如下所示:

if (statusFilter.SelectedValue == "NULL"){
   string query = ".... AND Status IS NULL...."
}
else{
   string query = ".... AND Status IS NOT NULL...."
}

推荐阅读