2013-03-13 98 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 - 在数据读取器在C - 急 - 没有执行阅读)以及他们如何很好地解决了这个问题 – Steve 2013-03-13 12:01:05

+0

你可以填写一个数据表。 Datareader不会让你回去。 – Jaxedin 2013-03-13 11:53:00

+0

Steve,我相信你的回答是正确的。你应该转换回答,以便我可以标记它。 – oscilatingcretin 2013-03-13 13:51:13

回答

0

每史蒂夫,看起来这是一个重复:

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

由于史蒂夫没有按我不想把他的评论放在答案上,我用这个链接回答我自己的问题。我会删除这个问题,但是因为它有答案,所以我不会让我。我不希望这会影响我的问题/回答比率,所以我们在这里。

0

我认为您正在寻找:HasRows,它使您能够确定DataReader是否从中读取任何结果。

if(Reader.HasRows) {} 
+1

是不是关于读者是否已经完全阅读的问题,读者是否有任何数据? – 2013-03-13 11:29:13

+1

在读完所有数据后,HasRows仍然为真。所以在这种情况下它不可靠。 – Steve 2013-03-13 11:53:13

0

它错了。

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

它迭代到读者。

如果使用,

If reader.read 
// 
End if 

它仅读取一次

+0

我不确定我关注。在我的问题中,我相信我说*原因是因为.Read()在调用*时自动前进到下一行。 – oscilatingcretin 2013-03-13 12:08:57

0

您可以通过加载到一个DataTable像下面通过Datareader数据迭代,

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加载到datatabledatareader将自动关闭。但在同一时间,您可以在问题的意见通过datatable多次重复使用计数的任何约束]

相关问题