0

我有一个用于过滤网格的查询

     SELECT * FROM Resources
              WHERE ResourceName  ='" + ResourceName + "' 
              AND  Status = '" + status + "' "

我的网格看起来像这样

  ResourceID|ResourceName|Status

我已经在下拉列表中添加了 ResorceName 和 Status 来过滤网格,现在我的问题是,在这个 select 语句中,如果任何参数为空,则数据不会绑定到网格,但是如果我同时传递这两个参数,它会过滤网格和从网格中给出所需的行或过滤的行...如果任何参数为空,谁能告诉我如何编写选择语句。

4

3 回答 3

1

看看下面关于捕获所有查询的帖子

抓住所有例子

于 2012-08-01T12:54:31.993 回答
1

在快速解决您的问题方面,这样的事情会起作用......

Select * From Resources Where (ResourceName = '"+ ResourceName + "' OR ResourceName IS NULL) AND (Status = '" + Status +"' OR Status IS NULL)

然而,这不是一段可接受的代码,因为它容易受到 SQL 注入的影响。本质上,假设传入的 ResourceName 是

'; Drop Table Resources; --

你可能不需要我告诉你那是做什么的。

我的建议是始终在 .Net 中使用 SQLCommand 对象——在其他语言中也称为“准备好的语句”。它可以防止这些技巧......

于 2012-08-01T13:08:21.513 回答
0
SELECT * FROM Resources
WHERE (ResourceName  = CASE WHEN '" + ResourceName + "' IS NULL THEN ResourceName  ELSE '" + ResourceName + "' END) //do same for other parameter
于 2012-08-01T13:07:02.433 回答