使用Where子句过滤SqlDataReader

时间:2014-06-16 20:32:25

标签: c# .net vb.net ado.net sqldatareader

我的客户端如下

Id  Name status  
1   A      Y  
2   B      Y  
3   C      Y  
4   D      N  

我要求检索结果并过滤它们,仅通过SqlDataReader

这就是我正在做的事情,

我正在执行SqlDataReader的选择声明 结果返回到我的SqlDataReader后,我无法通过在SqlDataReader上保留where子句来检索结果。

我可以知道,如何阅读基于条件的SqlDataReader

SqlCommand command = new SqlCommand("SELECT ID, Name , Status FROM Client;",connection);
connection.Open();

SqlDataReader reader = command.ExecuteReader();

if (reader.HasRows)
{
    while (reader.Read())
    {
        //Here, I have to to filter the results like
        //Select * from Client where status = 'N'                
    }
}

请建议??

2 个答案:

答案 0 :(得分:4)

正常的SQL WHERE子句是正确的路径。它将只检索所需的记录,如果需要过滤掉不需要的行,则不再进行测试。当然,参数化查询将对过滤器的可能方差有很大帮助

SqlCommand command = new SqlCommand(@"SELECT ID, Name , Status FROM Client
                                      WHERE status = @st;",connection);    
command.Parameters.AddWithValue("@st", "N");  // Or use a passed string variable
connection.Open();
SqlDataReader reader = command.ExecuteReader();

if (reader.HasRows)
{
    while (reader.Read())
    {
        // Here you have only the records with status = "N"
    }
}

上述Joel Coehoorn先生的评论解释了这种方法的其他优点。

答案 1 :(得分:3)

读取器在读取之前无法过滤,但您可以继续。

while (reader.Read())
{
    status = rdr.getstring(1);
    if (status != 'N') continue;
    // process 
}