从OracleDataReader动态保存查询结果

时间:2014-04-01 15:59:23

标签: vb.net oracle collections

VB.NET 2010 框架3.5

我查询架构不是静态的表。字段数可以从一天更改为下一天。通常我创建一个具有每个字段属性的类,循环遍历OracleDataReader并使用数据库中的值填充该类的列表。断开与数据库的连接,让OracleDataReader超出范围,并有一个很好的对象列表来表示查询中的数据。

我的问题是这个表的架构是动态的。其他人可以在此表中创建和删除字段。我需要一种方法来查询表格并保存结果&#39;在某种动态数据结构中,我更喜欢使用vb.net列表(t)类(System.Collections.Generic)作为我在应用程序的其他部分中执行此操作的方式< / p>

2 个答案:

答案 0 :(得分:1)

我能想到做这样的事情的唯一方法是:

CREATE TABLE tmp1 AS SELECT * FROM perm_table

这将是系统崩溃/关闭后能够继续运行的唯一方法 当你完成它时,你也必须放弃表格(实施表格GC)......

有.net对象可以方便您的内容,如果您希望它留在内存中 - DataTable是最常用的。

最后一件事 - 您可以从user_tab_columns动态获取表结构,并使您的代码适合特定的列结构。您只需使用通用对象来表示数据,或者对应用程序进行编程,以便能够处理结构的空值和版本。

我推荐这种方法 - 因为有了它,你就会努力工作,以后甚至不需要考虑这个问题(并且不需要管理数据库中的任何东西......)

答案 1 :(得分:1)

您可以对所有列进行循环:

Dim dr as OracleDataReader

dr = ...
For i as Integer = 0 to dr.FieldCount -1 Loop
   Debug.Print("Column " & i & " is " & dr.Item(i).ToString)
Next 

但是,此代码未经过测试,我不知道它是否适用于OracleDataReader。也许您必须使用OracleDataAdapterDataTable代替:

Dim dt as New DataTable
Dim da as OracleDataAdapter

da = ...
da.Fill(dt)

For i as Integer = 0 to dt.Columns.Count - 1 Loop
   Debug.Print("Column " & i & " is " & dt.Columns(i).Caption)
Next