2012-07-02 176 views
0

我有一个查询,我希望最初调用捕获数据库中的所有结果。哪里选择ALL?

然后,当一个组合框更新时,我希望它只捕获列仅WHERE column = SelectedItemFromComboBox

这一切都完成了;我唯一缺少的是一些方法来查询

SELECT * 
FROM Table1 
WHERE Column1 = ALL; 

所以,我可以将其更新到

SELECT * 
FROM Table1 
WHERE Column1 = SelectedItemFromComboBox; 

我能初步确定了字符串SelectedItemFromComboBox,以让我回所有值?

谢谢。

+3

只需删除WHERE子句:'select * from Table1;'。不要使用黑客和错误的SQL来避免程序中的一行代码。 –

+1

@dystroy问题是如何实现这一点,而不需要在客户端构建SQL。 – GSerg

+0

@dystroy这不会起作用,并且不会产生错误的SQL。 –

回答

5

设置SelectedItemFromComboBoxnull和改变你的查询

SELECT * 
FROM Table1 
WHERE Column1 = SelectedItemFromComboBox 
or SelectedItemFromComboBox is null 
+0

这里值得注意的是,即使从组合框中选择了某些东西,这也会导致全面扫描。 – MatBailie

3

你可以把类似的空字符串为SelectedItemFromComboBox和修改您的查询:

SELECT * 
FROM Table1 
WHERE SelectedItemFromComboBox = '' 
    OR Column1 = SelectedItemFromComboBox; 
2
SELECT * 
FROM Table1 
WHERE Column1 = Column1 

将获得的所有数据

所以你可以使用空值

SELECT * 
FROM Table1 
WHERE Column1 = isnull(some_value, Column1) 

其中某些值为NULL。要做到这一点使用一个空字符串,然后这个

SELECT * 
FROM Table1 
WHERE Column1 = isnull(CASE WHEN some_value = '' then NULL else some_value end)), Column1) 

,这将返回你想要

0

什么在这种情况下,你可以设置“SelectedItemFromComboBox”为0,并以这种方式,所以如果更新 查询第一个条件不符合OR条件,其中0 = 0并且 返回初始组合框值的所有记录。

SELECT * FROM表1

WHERE column1的= SelectedItemFromComboBox OR 0 = SelectedItemFromComboBox;

0

如果由于某种原因,您无法修改查询,并且只能控制值,并且您没有使用参数化查询,并且您知道如何防止SQL注入100%,那么您可以将SelectedItemFromComboBox设置为'' OR 1 = 1。这应该是非常罕见的,只有在你没有控制权的错误代码时才需要,而且完全是黑客。