簡體   English   中英

如何使用Npgsql從數據庫中獲取正確的列名?

[英]How can get correct Column Name from Database with 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" 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.Fill ,如果需要,可以按以下方式重命名列:

如果DbDataAdapter在填充DataTable時遇到重復的列,它將使用模式“ columnname1”,“ columnname2”,“ columnname3”等為后續列生成名稱。

顯然,此重復數據刪除過程以不區分大小寫的方式處理列名,這就是在示例中也要重命名列的原因。 無法直接關閉此行為(請參閱AdapterUtil.cs,2402 )。

解決方法是使用其他SqlCommand並使用SqlDataReader.GetName獲取確切的列名,然后相應地更改DataTable的列。 可以按照以下步驟進行:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM