Java 如何使用OracleDataReader类或其他类再次滚动到第一条记录?
我正在将一个Java应用程序迁移到VB.Net,并尝试翻译以下Java代码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
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编辑只是表明它不是原始答案的一部分。:-)