c# - 在 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”。
解决方案
这不会像每个人在评论中所说的那样工作。您可以执行 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...."
}
推荐阅读
- node.js - 在节点 js 中实现推送提要
- javascript - combineLatest 重构 @deprecated — 不再支持 resultSelector,而是使用管道映射?
- c - 为什么这个算法来判断是整除还是行不通?
- javascript - 事件监听器后的 div 大小
- algorithm - 递归语句的运行时间
- r - 以闪亮的方式很好地安排情节子图
- python - 为什么我不能使用 requests 库访问网站,而我仍然可以从浏览器访问它?
- html - Jquery addClass不添加类
- jquery - 循环后显示引导模式
- python - 如何在 heroku 上设置 ~/.aws/credentials?