【问题标题】:Show current amount of rows being read in Oracle显示当前在 Oracle 中读取的行数
【发布时间】:2017-06-16 17:45:03
【问题描述】:

我目前正在开发一个小型应用程序,该应用程序将执行大量查询,结果会产生大量行(约 500k,高达一百万)。所有这些查询都在 BGWorker 中一一执行。有一个用于 SQL Server 2008 的 BGWorker,另一个用于 Oracle 11g。

所以,问题是:有没有办法显示在 C# 中执行查询时正在读取的当前行数?

例如,在 PL/SQL 中运行的任何查询都会显示此数字,该数字每毫秒更新一次,并反映正在返回的行数:

(是的,这样的行数有时让我感到畏缩。)

【问题讨论】:

  • 您在使用 ADO.NET、ORM 等吗?
  • 我在这里使用 ADO.NET。它只是一个小型 WinForms 应用程序。
  • 相关:stackoverflow.com/questions/2611972/… 据我所知,即使使用 ORM,似乎也没有太多支持。
  • 我不明白这个问题:为什么不在DataReader 创建时声明一个计数器,然后在每个Read() 之后简单地递增它?
  • 否:每次获取一行时都会调用 Read 命令,无论如何这正是图像中 sql 编辑器幕后发生的事情

标签: c# winforms sql-server-2008 oracle11g


【解决方案1】:

正如Microsoft Docs(我的重点)中解释的那样

DataReader 提供无缓冲数据流,允许过程逻辑高效按顺序处理来自数据源的结果。在检索大量数据时,DataReader 是一个不错的选择,因为数据没有缓存在内存中。

更具体地说是您的问题

你使用DataReader对象的Read方法获取一行 查询结果。

根据我的 cmets,您图像中 sql 编辑器的幕后发生的事情是,它只是在创建 DataReader 之后定义了一个计数器,并在每个 Read() 之后简单地递增它

【讨论】:

  • 显然我错过了 DbDataReader 的一个完全有效且众所周知的功能,在使用它多年之后。感谢您清除它!
猜你喜欢
  • 1970-01-01
  • 2018-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多