【问题标题】:How to retrieve value from IDataReader that have multiple tables如何从具有多个表的 IDataReader 中检索值
【发布时间】: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; }

【问题讨论】:

    标签: c# sql sql-server-2008 sqlcommand idatareader


    【解决方案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() 的例子吗?谢谢你的关注顺便说一句:)
    猜你喜欢
    • 2010-10-20
    • 2017-09-08
    • 2014-10-27
    • 2021-11-22
    • 2020-04-11
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    相关资源
    最近更新 更多