如何使用 OracleDataReader class 或另一个 class 再次滚动到第一条记录?

How to scroll to first record again using OracleDataReader class or another class?

我正在将 Java 应用程序迁移到 VB.Net,我尝试翻译以下 Java 代码

Statement stmt 
    = conx.createStatement
        (ResultSet.TYPE_SCROLL_INSENSITIVE
        ,ResultSet.CONCUR_READ_ONLY
        );
ResultSet rsSheet = stmt.executeQuery(sSql);
bStatus = rsSheet.next();
...
bStatus = rsSheet.first();

在此代码中,使用了可滚动 ResultSet。我可以读取 executeQuery() 函数返回的记录,当我终止读取它们时,我可以再次读取它 而无需 第二次询问数据库。

您可以在此处找到有关 ResultSet 的一些信息 https://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html

我的翻译代码如下

Dim cmd = conx.CreateCommand()
cmd.CommandText = sSql
Dim rsSheet as OracleDataReader = cmd.ExecuteReader()
bStatus = rsSheet.Read()
...
bStatus = rsSheet.? 'how to read first record again ?

但我不知道如何做到 OracleDataReader 是可滚动的?

我可以从第一条记录到最后一条记录读取结果集,但我无法再次读取它。

我发现再次读取所有这些记录的唯一简单解决方案是再次调用 ExecuteReader() 函数。

问题

OracleDataReader Class 可以滚动吗?怎么样?

是否存在另一个 Class 来完成这项工作?哪个?

PS:使用 Linq 不是解决方案,因为 SQL 语句是在数据库结构未知的环境中执行的。无法创建实体。

DataReader 只是一种方式。使用数据表。这是结果集的内存表示。您还可以使用 DataTable 作为各种控件的数据源。您可以在 DataTable.AsEnumerable()

上使用 Linq
Private Sub OPCode()
    Dim sSql = "Your command text"
    Dim dt As New DataTable
    Using cn As New OracleConnection(ConStr),
            cmd As New OracleCommand(sSql, cn)
        cn.Open()
        dt.Load(cmd.ExecuteReader)
    End Using
    'Code to read data.
End Sub

编辑

查看 DataTable 中内容的最简单方法是在 DataGridView 中显示它(如果这是 WinForms)。

DataGridView1.DataSource = dt.

访问特定的行和列。

Dim s = dt.Rows(1)("ColName").ToString

Rows 集合从索引 0 开始,列名来自您的 Select 语句。然后,您需要使用 .ToString 或 Cint()、CDbl() 等转换为数据类型,因为此 returns 一个对象。