Что противоречит методу NextResult() C#

#c# #sqldatareader

#c# #sqldatareader

Вопрос:

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

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

 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. Вы этого не делаете. Он читает только вперед. Если вы хотите получить доступ к предыдущему результату, вам необходимо сохранить его при чтении.

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

Ответ №1:

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

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

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