如何从 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 获取 int32 和字符串。收到错误 System.IndexOutOfRangeException: 'StudentID'