我的客户端如下
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'
}
}
请建议??
答案 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
}