假设我返回一个 DataReader 并使用以下代码完全迭代它:
While Reader.Read
Dim x as string = Reader.GetString("x")
End While
我希望能够在不调用.Read()的情况下确定它是否在 While 循环之后被迭代。原因是因为 .Read() 在调用时会自动前进到下一行。如果存在读者没有完全迭代的情况,我不希望它前进到下一行。似乎有某种方法可以判断读者是否已完全阅读。
假设我返回一个 DataReader 并使用以下代码完全迭代它:
While Reader.Read
Dim x as string = Reader.GetString("x")
End While
我希望能够在不调用.Read()的情况下确定它是否在 While 循环之后被迭代。原因是因为 .Read() 在调用时会自动前进到下一行。如果存在读者没有完全迭代的情况,我不希望它前进到下一行。似乎有某种方法可以判断读者是否已完全阅读。
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
计算任何约束来迭代多次。]
根据问题评论中的史蒂夫,看起来这是重复的:
如何在 C# 中检测 DataReader 上的 EOF 而不执行 Read()
由于史蒂夫不想对答案发表评论,因此我正在使用此链接回答我自己的问题。我会删除这个问题,但 se 不会让我,因为它有答案。我不希望这影响我的问答比例,所以我们来了。
I think you are looking for: HasRows, which enables you to determine if the DataReader has any results reading from it.
if(Reader.HasRows) {}
Its wrong.
If there is a circumstance where the reader hasn't completely been iterated through
It iterates till the reader.
If you use,
If reader.read
//
End if
It reads only one time