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

Posted

技术标签:

【中文标题】如何从 SqlDataReader 中只获取一些行?【英文标题】:How to fetch only some rows from a SqlDataReader? 【发布时间】:2014-05-06 15:44:16 【问题描述】:

我正在使用这样的数据读取器从表中获取值:

    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" 的行? 我尝试使用 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");   

请帮帮我。 最好的问候。

【问题讨论】:

"Enable 字段是一个布尔值(True/False)。有没有办法只获取字段 enable="True" 的行?" - 你为什么不把它作为一个 WHERE 子句添加到 SQL 中? 【参考方案1】:

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

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

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

您还应该考虑使用 LINQ to SQL 或实体框架,而不是您当前使用的相当低级的堆栈。它并不总是合适,但它确实在合适的地方让事情变得更干净。

【讨论】:

我可以试着找到一些东西来掩盖我为什么问这个(现在)愚蠢的问题,但事实是我累了,这从来没有在我的脑海中闪过。谢谢你的耐心。这解决了我的问题。

以上是关于如何从 SqlDataReader 中只获取一些行?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 SqlDataReader 获取列的表名

从 SqlDataReader 读取数据

如何从 SqlDataReader 获取 int32 和字符串。收到错误 System.IndexOutOfRangeException: 'StudentID'

如何从 oracle sql 中只选择 1 行?

SqlDataReader - 如何将当前行转换为字典

如何使用 SqlDataReader 获取位值并将其转换为布尔值?