如何从具有多个表的 IDataReader 中检索值
Posted
技术标签:
【中文标题】如何从具有多个表的 IDataReader 中检索值【英文标题】:How to retrieve value from IDataReader that have multiple tables 【发布时间】:2017-04-04 08:48:25 【问题描述】:我最近一直在尝试从IDataReader
获取值,但无法从我查询的第二个表中获取数据。有人可以帮我找到一种方法来获取它们。这是我目前所拥有的:
using (SqlCommand command = new SqlCommand(@"SELECT name, value from Company.dbo.A;SELECT sum(value) from Company.dbo.A ", connection))
command.Notification = null;
SqlDependency dependency = new SqlDependency(command);
dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);
if (connection.State == ConnectionState.Closed)
connection.Open();
using (var reader = command.ExecuteReader())
return reader.Cast<IDataRecord>()
.Select(x => new LocationInfo()
Names = x.GetString(0),
Values = Math.Round(x.GetDouble(1), 2).ToString("#,##0.00"),
ValuesDouble=x.GetDouble(1),
SumVol=x.GetDouble(2)//this line does not work(index out of bounds error)
).ToList();
因此,您如何获得第二个 SQL 命令,即 SUM(value) into SumVol
,我已为其创建了 public double SumVol get; set;
?
【问题讨论】:
【参考方案1】:您需要调用reader.NextResult()
让阅读器输出第二个结果集。您可能需要分两遍执行此操作,或者重新构建查询以在单个结果集中执行此操作。
这是一个查询,可以为您提供每个唯一名称的总和
SELECT name, value, SUM(value) OVER (PARTITION BY name) from Company.dbo.A;
这是一个使用子查询来获取要在每一行上打印的总和
SELECT name, value, (SELECT sum(value) from Company.dbo.A) from Company.dbo.A;
【讨论】:
感谢您的回答,但是有没有办法从两个 sqlcommand 中获取值?因为我的查询比这复杂得多。提前谢谢你 我在第一段中告诉过你,使用reader.NextResult()
切换到第二个结果集,然后在返回结果之前更新列表的值。
我还是不明白如何使用 reader.NextResult()。我必须使用(阅读器)制作 2 吗?,我将 reader.NextResult() 放在哪里?很抱歉问得太多了,但你能给我在上面的上下文中使用 reader.NextResult() 的例子吗?谢谢你的关注顺便说一句:)以上是关于如何从具有多个表的 IDataReader 中检索值的主要内容,如果未能解决你的问题,请参考以下文章