如何:使用没有记录计数的数据读取器
人们似乎已经失去了使用现代语言生成旧式 COBOL/RPG 报告的能力。
我经常看到使用依赖于记录计数的 DataReader 的代码。 因此,在不需要时会出现额外的聚合查询。
在大多数情况下,此代码需要知道是否有其他可用记录。 换句话说,告诉我是否位于最后一条记录,以便我可以显示记录分隔符。
一个简单的算法如下:
Dim available As Boolean = rdr.Read()
While available
DisplaySearchRecord(rdr)
available = rdr.Read()
If available Then DisplaySeparator()
End While
当算法的简单更改就足够时,请不要使用 COUNT(*) 或数据表/数据集。
It seems folks have lost the ability to generate old style COBOL/RPG reports using modern day languages.
I often see code using DataReaders that relies on a count of records. So an additional aggregrate query is present when it need not be.
In most circumstance this code needs to know if there is another record available or not. In other words, tell me if I'm at the last record so I can display a record separator.
A simple algorithm would be as follows:
Dim available As Boolean = rdr.Read()
While available
DisplaySearchRecord(rdr)
available = rdr.Read()
If available Then DisplaySeparator()
End While
Please, do not use COUNT(*) or a datatable/dataset when a simple change in algorithm will suffice.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
为什么在
while
之后不显示分隔符?Why not showing the separator after the
while
?你可以尝试这样的事情
You can try something like this
你必须继续调用 reader.Read() ,当没有更多记录时它会返回 false 。
所以我要做的是将数据库中的数据转储到
List
中,然后在填充列表后...使用 for( i++ ) 循环迭代它并检查 i列表.Countyou have to keep calling reader.Read() and it will return false when there are no more records.
So what I would do is dump the data out of the db into a
List<YourRecord>
and after I have the list populated ... iterate through it with a for( i++ ) loop and check i against the list.Count