如何从SqlDataReader中只获取一些行?

时间:2014-05-06 15:44:16

标签: c# linq fetch datareader

我从带有datareader的表中获取值,如下所示:

    string query = @"SELECT XMLConfig, Enable FROM TableCfg";
    using (SqlConnection cnction = new SqlConnection(cnnstr))
    {
      cnction.Open();
      using (SqlCommand sqlCmd = new SqlCommand(query, cnction))
      {
         SqlDataReader dtRead = sqlCmd.ExecuteReader();
         while (dtRead.Read())
         {
           xmlConf = dtRead.GetString(0);
           enabl = dtRead.GetString(1);
         }
         dtRead.Close();
      }
    }

Enable字段是布尔值(True / False)。有没有办法只获取行,其中field enable =" True"? 我尝试使用LINQ,但我是新手,我一定是做错了。

using (SqlCommand sqlCmd = new SqlCommand(query, cnction))
{
  SqlDataReader dtRead = sqlCmd.ExecuteReader();
  var ob =(from IDataRecord r in sqlCmd.ExecuteReader()
           where r.GetString(3).ToString() == "True"
           select "Enable");   
}

请帮帮我。 最诚挚的问候。

1 个答案:

答案 0 :(得分:7)

您应该在数据库端而不是客户端执行尽可能多的过滤:

string query = "SELECT XMLConfig FROM TableCfg WHERE Enable = True";

请注意,现在您甚至不需要提取Enable,因为您已经知道所有匹配的行都是True

您还应该考虑使用LINQ to SQL或Entity Framework,而不是您当前使用的相当低级别的堆栈。它总是是合适的,但它确实使事情变得更加清洁。