NpgSQL只返回表的第一列名称

时间:2017-06-23 13:03:43

标签: c# postgresql npgsql

我使用PostgreSQL / NpgSQL将c#桌面应用程序连接到PostgreSQL数据库。第一个任务是返回我的数据库中的所有表名称工作正常。根据这个结果,我想得到每个表的所有列名。但问题是NpgDatareader总是有一列是表的第一列,它不包含其他列名。任何提示或帮助将不胜感激。

NpgsqlConnection npgConnection2 = new NpgsqlConnection(connectString);
            npgConnection2.Open();
            foreach (var t in _tableNames)
            {
                string sqlColumns = "select column_name from information_schema.columns where table_name='"+ t +"';";
                NpgsqlCommand npgCommand2 = new NpgsqlCommand(sqlColumns, npgConnection2);
                NpgsqlDataReader reader2 = npgCommand2.ExecuteReader();

                List<string> colTitles = new List<string>();
                int i = 0;
                while (reader2.Read())
                {
                    colTitles.Add(reader2[i].ToString());
                    i++;
                }
                _layerObjects.Add(new LayerObject(t.ToString(),colTitles));
            }
            npgConnection2.Close();

1 个答案:

答案 0 :(得分:1)

params.put("raw_user_data", rawUser)

应替换为:

while (reader2.Read())
{
    colTitles.Add(reader2[i].ToString());
    i++;
}

while (reader2.Read()) { colTitles.Add(reader2[0].ToString()); } 是您的列索引 - 但您只有一列(您有多个但只有一列)。所以它应该总是0。