似乎你(直接或间接)使用
DbDataAdapter.Fill
如有必要,重命名列如下:
如果在填充
数据表,它使用
模式“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