如何使用Npgsql从数据库中获取正确的列名?
这是数据库中的我的表:如何使用Npgsql从数据库中获取正确的列名?,sql,.net,vb.net,npgsql,Sql,.net,Vb.net,Npgsql,这是数据库中的我的表: CREATE TABLE public.test ( id integer NOT NULL DEFAULT nextval('test_id_seq'::regclass), hc character varying(30), "Hc" character varying(30), "HC" character varying(30), f character varying(30), "F&qu
CREATE TABLE public.test
(
id integer NOT NULL DEFAULT nextval('test_id_seq'::regclass),
hc character varying(30),
"Hc" character varying(30),
"HC" character varying(30),
f character varying(30),
"F" character varying(30),
f1 character varying(30),
te numeric(2,2),
CONSTRAINT test_pkey PRIMARY KEY (id)
)
如果我从vb.net获得Npgsql的表定义:
select * from test where null = null
结果:某些列已更改名称:
例如:Hc=>Hc1,Hc=>HC2
如何使用Npgsql从数据库中获取正确的列名?如果需要,您可以直接或间接使用以下重命名列的方法: 如果DbDataAdapter在填充 DataTable,它使用 模式columnname1、columnname2、columnname3,依此类推 显然,此重复数据消除过程以不区分大小写的方式处理列名,这就是在您的示例中列名也会被重命名的原因。无法直接关闭此行为,请参见 解决方法是使用一个额外的SqlCommand并使用SqlDataReader.GetName获得确切的列名,然后相应地更改DataTable的列。这可以通过以下方式实现:
你能发布一些代码来准确显示你在做什么吗?使用NpgsqlDataReader.GetName获取字段名将显示正确的名称。
Dim query = "select * from test where null = null"
' setup connection
Dim connection As New NpgsqlConnection(
String.Format("Server={0};Port={1};Database={2};User Id={3};Password={4};",
host, port, database, user, password))
connection.Open()
' fill data table from query
Dim table As New DataTable
Using adapter = New NpgsqlDataAdapter(query, connection)
adapter.Fill(table)
End Using
' correct column names
Using command = New NpgsqlCommand(query, connection)
Using reader = command.ExecuteReader()
For i = 0 To table.Columns.Count - 1
table.Columns(i).ColumnName = reader.GetName(i)
Next
End Using
End Using
' display table in DataGridView
view.DataSource = table