如何从具有多个表的IDataReader中检索值

时间:2016-11-21 02:45:39

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

我一直在尝试从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();
}

因此,如何获得我为SUM(value) into SumVol创建public double SumVol { get; set; }的第二个SQL命令?

1 个答案:

答案 0 :(得分: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;