2017-01-25 1 views
0

У меня есть хранимая процедура, которая возвращает две таблицы. Таблица 1 имеет, например, {1,2,3,4,5}, таблица 2 будет иметь {a, b, c, d, e}. Например, {1, a}, {2, b} аналогично все связаны.Как обрабатывать несколько результатов с помощью DataReader в Visual C#?

В моем читателе я должен прочитать все эти данные в списке. Объект будет иметь два свойства: {1, a} go. Это код, у меня сейчас,

while(reader.Read()) 
     { 
      Transaction transaction = null; 
      transactions.Add(transaction = new Transaction() 
      { 
       TranID = reader.GetInt64(reader.GetOrdinal("TranID")) 
      }); 

      if (reader.NextResult()) 
      { 
       while (reader.Read()) 
       { 
        transaction.Amounts.Add(new Fund 
        { 
         Amount = reader.GetDecimal(reader.GetOrdinal("Amount")), 
        }); 
       } 
      } 
     } 

То, что здесь происходит, если я вернусь 10 транзакций Идентификаторы и 10 Суммы, мой окончательный результат имеет только 1 сделка и 10 Суммы, отображенные на него. Как получить 10 транзакций с эквивалентной суммой?

+2

Я думаю, что было бы лучше изменить хранимую процедуру, чтобы вернуть единый результирующий набор вместо двух. –

+0

Нет ли другого способа сделать это? – user1890098

+0

Возможно, существуют другие способы сделать это, но из того, как вы описали таблицы, которые вы вернетесь, как вы можете быть уверены, что это {1, a}, {2, b}, а не {1, a, b} {2, c}? –

ответ

1

Вы не можете получить доступ к нескольким результирующим наборам таким образом из SqlDataReader. Вы можете получить доступ ко всем строкам из одного набора результатов за раз. Если вы перейдете к следующему набору, вы не сможете вернуться к предыдущему набору результатов.

Ниже приведен пример кода того, как вы извлекаете данные из нескольких наборов результатов SqlDataReader.

while (reader.Read()) 
{ 
    Console.WriteLine(reader.GetString(0)); 
} 

if (reader.NextResult()) 
{ 
    while (reader.Read()) 
    { 
     Console.WriteLine(reader.GetString(0)); 
    } 
} 
Смежные вопросы