如何:使用没有记录计数的数据读取器

发布于 2024-07-17 04:15:44 字数 427 浏览 4 评论 0原文

人们似乎已经失去了使用现代语言生成旧式 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

梦里梦着梦中梦 2024-07-24 04:15:44

为什么在 while 之后不显示分隔符?

   While rdr.Read()
       DisplaySearchRecord(rdr)
   End While
   DisplaySeparator()

Why not showing the separator after the while?

   While rdr.Read()
       DisplaySearchRecord(rdr)
   End While
   DisplaySeparator()
小苏打饼 2024-07-24 04:15:44

你可以尝试这样的事情

Dim IsFirst As Boolean = True

While rdr.Read()
  If Not IsFirst
    DisplaySeparator()
  Else
    IsFirst = False
  End If

  DisplaySearchRecord(rdr)
End While

You can try something like this

Dim IsFirst As Boolean = True

While rdr.Read()
  If Not IsFirst
    DisplaySeparator()
  Else
    IsFirst = False
  End If

  DisplaySearchRecord(rdr)
End While
金橙橙 2024-07-24 04:15:44

你必须继续调用 reader.Read() ,当没有更多记录时它会返回 false 。

所以我要做的是将数据库中的数据转储到 List 中,然后在填充列表后...使用 for( i++ ) 循环迭代它并检查 i列表.Count

you 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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文