2016-10-15 6 views
0

У меня есть два запроса SELECT хранимой процедуры. Я нашел способ перейти к следующему результату с помощью метода NextResult(), но, что, если я хочу перейти к набору результатов prevoius?Что противоположно методу NextResult() C#

Я хочу, чтобы это сделать, потому что я извлекая имя столбцов с помощью этого метода:

var columnNames = Enumerable.Range(0, reader.FieldCount).Select(reader.GetName).ToList(); 

так, для следующего набора результатов я проверить, если есть следующий результат:

if (reader.NextResult()) 
{ 
    var columnNamesB = Enumerable.Range(0, reader.FieldCount).Select(reader.GetName).ToList(); 
} 

Есть ли способ сделать это?

+1

У вас нет. Он читает только вперед. Если вы хотите получить доступ к предыдущему результату, вам необходимо сохранить его, когда вы его прочитали. –

+1

Используйте SqlDataAdapter и сохраните результаты в DataSet, если вам нужно вернуться. –

ответ

3

Вы не можете. Поскольку большинство потоковых API SqlReader не поддерживает возврат к предыдущему элементу. В общем случае то, что вы просите, это вернуться к чтению некоторых байтов из сети, что просто невозможно.

Вы найдете подобное поведение во многих объектах, полученных из Stream (например, NetworkStream), а также в IEnumerable.

Исправление: если вам нужно вернуться к предыдущим результатам, вы либо сохраните их локально, когда будете читать, либо запросите еще раз.