Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用OracleDataReader类或其他类再次滚动到第一条记录?_Java_Vb.net_Oracle_Translate_Datareader - Fatal编程技术网

Java 如何使用OracleDataReader类或其他类再次滚动到第一条记录?

Java 如何使用OracleDataReader类或其他类再次滚动到第一条记录?,java,vb.net,oracle,translate,datareader,Java,Vb.net,Oracle,Translate,Datareader,我正在将一个Java应用程序迁移到VB.Net,并尝试翻译以下Java代码 Statement stmt = conx.createStatement (ResultSet.TYPE_SCROLL_INSENSITIVE ,ResultSet.CONCUR_READ_ONLY ); ResultSet rsSheet = stmt.executeQuery(sSql); bStatus = rsSheet.next(); ... bSta

我正在将一个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();
在这段代码中,使用了一个可滚动的结果集。我可以读取
executeQuery()
函数返回的记录,当我终止读取它们时,我可以再次读取,而无需再次询问数据库

您可以在这里找到有关ResultSet的一些信息

我的翻译代码如下

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
类是否可滚动?怎么做

是否存在另一个类来完成此工作?哪个


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

数据读取器只是一种方法。使用数据表。这是结果集的内存表示形式。还可以使用DataTable作为各种控件的数据源。可以在DataTable.AsEnumerable()上使用Linq

Private子操作码()
Dim sSql=“您的命令文本”
Dim dt作为新数据表
将cn用作新的OracleConnection(CONTR),
cmd作为新的OracleCommand(sSql,cn)
cn.Open()
dt.Load(命令执行器读取程序)
终端使用
'读取数据的代码。
端接头
编辑

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

DataGridView1.DataSource = dt.
访问特定的行和列

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

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

?数据表?你是对的;你必须再次执行死刑。。正如其他人所指出的,您可以使用DataTable等将数据加载到内存中,但是如果您的结果集对于内存来说太大,您必须重新执行它!这对我很有效。唯一的“litle”问题是用于获取DataRow中的值的方法与OracleDataReader中使用的方法不同。示例:DataRow中不存在GetString()。下面的链接也很有趣[DataTable:如何使用行名和列名获取项目值?(VB)]:请参见编辑我的答案。确定。但是你的第一个答案对我来说已经足够了。我的最后一点评论只是关于如何获取行中列的值的一点评论。你对DataGridView的评论我不感兴趣。。。因为我的程序是批处理程序。但它对其他用户可能有用;-)但我不明白你为什么用“编辑”作为标题?@schlebe编辑只是表明它不是原始答案的一部分。:-)