有没有办法告诉DataReader是否已经迭代而没有调用.Read()?

时间:2013-03-13 11:14:44

标签: .net vb.net datareader

假设我返回一个DataReader并使用以下代码完全迭代它:

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

我希望能够确定在没有调用.Read()的While循环之后是否已经迭代了它。原因是因为.Read()在调用时自动前进到下一行。如果存在读者尚未完全迭代的情况,我不希望它前进到下一行。似乎有一些方法可以判断读者是否已被完全阅读。

4 个答案:

答案 0 :(得分:0)

我认为您正在寻找:HasRows,它可以让您确定DataReader是否有任何读取结果。

if(Reader.HasRows) {}

答案 1 :(得分:0)

错了。

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

它迭代到读者。

如果您使用,

If reader.read
//
End if

只读一次

答案 2 :(得分: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并计算任何约束。]

答案 3 :(得分:0)

Per Steve在问题的评论中,看起来这是重复的:

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

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