В моем текущем appliction мне нужно выполнить SQL-запрос и получить счет результатов, которые были возвращены перед продолжением. Это мой код ниже:OracleDataReader выбрасывает исключение
if (GetCount(reader) == 1)
{
reader.Read();
Console.WriteLine(reader["field1"]);
Console.WriteLine(reader["field2"]);
}
И это GetCount()
метод
public static int GetCount(OracleDataReader reader)
{
int count = 0;
while (reader.Read())
{
count++;
}
return count;
}
После получения подсчета результатов, когда он входит в, если блок кода, исключение выбрасывается с указанием:
[System.InvalidOperationException] = {"Operation is not valid due to the current state of the object."}
Однако, если у меня нет счета, он отлично работает.
Я думаю, что поскольку моя функция GetCount имеет reader.Read(), мне нужно как-то сбросить считыватель перед чтением значений? Честно говоря, я в тупике. Какие-либо предложения?
Редактировать; В первом блоке кода я получаю такое же исключение, даже если я прокомментирую reader.Read();
Но когда я прохожу читатель GetCount по значению, это не делает копию, так что мой оригинальный читатель остается нетронутым? – xbonez
@xbonez читатель, являющийся ссылочным типом, означает, что вы отправляете копию ссылки по значению, а не копию читателя. Таким образом, вы указываете на одного и того же читателя. –
Это может быть страшное обходное решение, но после прохождения чтения в GetCount, если я скопирую его в другую переменную Datareader и использую это, чтобы получить счет, будет ли это работать? – xbonez