VB.NET 2010 框架3.5
我查询架构不是静态的表。字段数可以从一天更改为下一天。通常我创建一个具有每个字段属性的类,循环遍历OracleDataReader并使用数据库中的值填充该类的列表。断开与数据库的连接,让OracleDataReader超出范围,并有一个很好的对象列表来表示查询中的数据。
我的问题是这个表的架构是动态的。其他人可以在此表中创建和删除字段。我需要一种方法来查询表格并保存结果&#39;在某种动态数据结构中,我更喜欢使用vb.net列表(t)类(System.Collections.Generic)作为我在应用程序的其他部分中执行此操作的方式< / p>
答案 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
。也许您必须使用OracleDataAdapter
和DataTable
代替:
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