2013-03-13 1 views
0

Скажем, я возвращаю DataReader и полностью перебирать его, используя этот код:Есть ли способ узнать, был ли обработан DataReader без вызова .Read()?

While Reader.Read 
    Dim x as string = Reader.GetString("x") 
End While 

Я хотел бы быть в состоянии определить, является ли оно или нет итерации после цикла While без вызова .read(). Причина в том, что .Read() автоматически переходит к следующей строке при ее вызове. Если есть обстоятельство, когда читатель не был полностью повторен, я не хочу, чтобы он продвигался к следующему ряду. Кажется, что есть какой-то способ узнать, прочитан ли читатель полностью.

+0

Нет, нет способа проверить, используя непосредственно готовый DataReader, но посмотрите [этот вопрос] (http://stackoverflow.com/questions/7844355/how-to-detect-eof -on-datareader-in-c-sharp-without-executing-read) и как они хорошо решили проблему – Steve

+0

Вы можете заполнить данные. Datareader не позволит вам вернуться. – Jaxedin

+0

Стив, я считаю, что ваш ответ правильный. Вы должны преобразовать, чтобы ответить, чтобы я мог отметить его. – oscilatingcretin

ответ

0

Per Стива в комментариях на вопрос, он выглядит как это дубликат:.

How to detect EOF on DataReader in C# without executing Read()

Поскольку Стив Безразлично Не хочу комментировать ответ, я отвечаю на свой вопрос по этой ссылке. Я бы удалил вопрос, но se не позволит мне, так как у него есть ответы. Я не хочу, чтобы это повлияло на мой вопрос/ответ, так что мы здесь.

0

Я думаю, что вы ищете: HasRows, что позволяет определить, есть ли у DataReader какие-либо результаты, полученные от него.

if(Reader.HasRows) {} 
+1

Разве это не вопрос о том, был ли читатель полностью прочитан, а не есть ли у читателя какие-либо данные? –

+1

HasRows по-прежнему верен и после того, как вы прочитали все данные. В этом случае он не является надежным. – Steve

0

Неправильно.

If there is a circumstance where the reader hasn't completely been iterated through 

Итерирует до читателя.

Если вы используете,

If reader.read 
// 
End if 

Он читает только один раз

+0

Я не уверен, что я следую. В моем вопросе, я полагаю, я сказал * Причина, по которой это происходит потому, что .Read() автоматически переходит к следующей строке, когда она вызывается *. – oscilatingcretin

0

Вы можете перебирать свои данные в Datareader, загружая его в DataTable, как показано ниже,

Dim DtTbl As DataTable = New DataTable 

'Load Your DataReader into a Datatable 
DtTbl .Load(rdr) 

'And Here You can itereate through Your data like below 
For Each xDataRow As DataRow In DtTbl .Rows 
     MsgBox(xDataRow.Item("COLUMN_NAME")) 
Next 

[Примечание: После того, как вы загрузили данные от datareader до datatable, datareader автоматически закрывается. Но в то же время вы можете перебирать что datatable много раз с подсчитывать никаких ограничений]