.net 是否有一种方法可以判断是否已在不调用.Read()的情况下对DataReader进行了迭代?

.net 是否有一种方法可以判断是否已在不调用.Read()的情况下对DataReader进行了迭代?,.net,vb.net,datareader,.net,Vb.net,Datareader,假设我返回一个DataReader并使用以下代码对其进行完全迭代: While Reader.Read Dim x as string = Reader.GetString("x") End While 我希望能够在不调用.Read()的情况下确定它是否在While循环之后被迭代。原因是调用.Read()时,它会自动前进到下一行。如果有一种情况,读者还没有完全被遍历,我不希望它前进到下一行。似乎有某种方法可以判断读卡器是否已完全阅读。我想您正在寻找:,它使您能够确定DataReader

假设我返回一个DataReader并使用以下代码对其进行完全迭代:

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

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

我想您正在寻找:,它使您能够确定DataReader是否有任何从中读取的结果

if(Reader.HasRows) {}
这是错误的

If there is a circumstance where the reader hasn't completely been iterated through
它一直迭代到读者

如果你使用

If reader.read
//
End if

它只读取一次

您可以在
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

[注意:一旦您将数据从
数据读取器
加载到
数据表
,则
数据读取器
将自动关闭。但同时,您可以在该
数据表
中重复多次,并计算任何限制。]

在问题的评论中,看起来这是一个副本:


因为史蒂夫不想在答案上发表评论,所以我用这个链接来回答我自己的问题。我会删除这个问题,但se不会让我,因为它有答案。我不想让这影响我的问题/答案比率,所以我们来了。

问题不在于读者是否已完全阅读,读者是否有任何数据?阅读所有数据后,HasRows仍然是正确的。所以在这种情况下是不可靠的。您可以填写一个数据表。Datareader不会让你回头。不,没有办法直接使用开箱即用的Datareader进行检查,但是看看他们是如何很好地解决了这个问题的Steve,我相信你的答案是正确的。您应该转换为答案,这样我就可以标记它。谢谢,但这将是一个副本。(请在名字前使用@符号,否则我永远不会知道你对我有评论)我不确定我是否遵守。在我的问题中,我想我说的原因是,当调用.Read()时,它会自动前进到下一行。