#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
.
Исправление: если вам нужно вернуться к предыдущим результатам, вы либо сохраняете их локально во время чтения, либо выполняете повторный запрос.