2016-11-21 3 views
0

Я пытался получить значения от 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(); 
} 

Следовательно, как вы получите вторую команду 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; 
+0

Спасибо для вашего ответа, но есть ли способ получить значение из двух sqlcommands? потому что мой запрос намного сложнее. заранее спасибо – MVCNoob

+0

Я сказал вам в своем первом абзаце, используйте 'reader.NextResult()', чтобы переключиться на второй результирующий набор, затем обновите значения списка, прежде чем возвращать результат. –

+0

Я до сих пор не понимаю, как я могу использовать reader.NextResult(). Нужно ли мне делать 2 с помощью (reader)?, Где я могу поставить reader.NextResult() ?. Извините за слишком многого, но вы можете привести мне пример использования reader.NextResult() в приведенном выше контексте. Благодарим вас за внимание btw :) – MVCNoob

Смежные вопросы