【发布时间】:2019-08-15 21:21:10
【问题描述】:
我正在使用最新的 npgsql 来访问 postgresql V12 数据库。应用程序:用户提供任意选择,显示网格,当用户单击列标题时显示元数据(我的,不是 Postgres 的)。该元数据按表和列存储,因此我需要检索 PostgreSQL 表名和列名来检索数据。
作为参考,在 ODBC 下这是解决方案:
Debug.Print(sqlrecordset.Fields(WhichField).Properties("BASETABLENAME").Value)
我从这些结构开始:
Public M_DS As System.Data.DataSet
Dim M_Conn As Npgsql.NpgsqlConnection
Dim M_Cmd As Npgsql.NpgsqlCommand
Dim M_DA As Npgsql.NpgsqlDataAdapter
以下逻辑返回查询中列的元数据,但“basetablename”和“basecatalogname”不是 PostgreSQL 目录或基表名称。这是一个错误吗?如果没有,我正在尝试做的事情是否可能?
Dim MyDTR As System.Data.DataTableReader
MyDTR = MyDs.CreateDataReader()
Dim Splunge As DataTable = MyDTR.GetSchemaTable
For i = 0 To Splunge.Rows.Count - 1
Debug.Print("Splunge Row " & i)
For j As Integer = 0 To Splunge.Rows(i).ItemArray.Count - 1
Try
Debug.Print("col " & j & " -> " & Splunge.Columns(j).ColumnName & " = " & Splunge.Rows(i).Item(j).ToString)
Catch
End Try
Next
Next
数据库“ElDorado”中的查询是“SELECT * FROM ACTION_CODE”
输出包括:
col 14 -> BaseCatalogName = NewDataSet (this is MyDS.datasetname - should be ElDorado?)
col 15 -> BaseSchemaName =
col 16 -> BaseTableName = Table (this is MyDs.Tables(0) name, and should be Action_Code?)
col 17 -> BaseColumnName = description
【问题讨论】:
-
据我所知,这个以前微不足道的任务现在不可能了。
标签: vb.net postgresql metadata npgsql