2012-08-01 89 views
0

我有我使用过滤电网如何在这种情况下编写select语句?

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

查询和我的格子看起来像这样

ResourceID|ResourceName|Status 

我已经添加了ResorceName和状态在下拉现在滤除电网我问题是,在这个select语句中,如果任何参数为null,则数据不绑定到网格,但如果我传递了这两个参数,它会过滤网格,并从网格中提供所需的行或过滤行......任何人都可以告诉如果任何参数为空,我该如何编写select语句。

+0

如果两者都为null会怎么样?以及你可以编写如果/当条件在sql – paragy 2012-08-01 13:01:19

回答

0
SELECT * FROM Resources 
WHERE (ResourceName = CASE WHEN '" + ResourceName + "' IS NULL THEN ResourceName ELSE '" + ResourceName + "' END) //do same for other parameter 
+0

我试过这个,但再次同样的问题没有行受到影响我有任何参数为空 – SoftwareNerd 2012-08-01 14:27:24

+0

@alliswell ...我得到它谢谢你很多 – 2012-08-01 14:29:01

+0

@anilkumar你会请发布一些你的代码? – paragy 2012-08-01 16:23:09

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对象 - 在其他语言中也称为“Prepared Statements”。它可以防止这些类型的技巧...