Postgres - элегантный способ вернуть имена столбцов в запросе - PullRequest
0 голосов
/ 14 декабря 2011

Объединение супер простого инструмента запросов, показанного ниже:

enter image description here

Проблема: как получить имена столбцов, чтобы они соответствовали результатам запроса?

Код

 NpgsqlConnection conn = new NpgsqlConnection("Server=127.0.0.1;Port=5432;User Id=postgres;Password=letmein;Database=dave;");
        conn.Open();

        try {
            var colName = new NpgsqlCommand(@"SELECT column_name
                                            FROM information_schema.columns
                                            WHERE table_schema='public' AND table_name='simple_table' ORDER BY column_name", conn);

            NpgsqlDataReader dr = colName.ExecuteReader();

            while (dr.Read()) {
                for (int i = 0; i < dr.FieldCount; i++) 
                    txtResults.Text += dr[i] + " ";
            }
            txtResults.Text += "\r\n \r\n";

            var command = new NpgsqlCommand(txtSql.Text, conn);
            dr = command.ExecuteReader();

            while (dr.Read()) {
                for (int i = 0; i < dr.FieldCount; i++) 
                    txtResults.Text += dr[i] + "  ";
                txtResults.Text += "\r\n";
            }
        }
        finally {
            conn.Close();
        }

Ответы [ 3 ]

1 голос
/ 17 декабря 2011

для ref:

 for (int i = 0; i < dr.FieldCount; i++)
 {
    fieldnames += dr.GetName(i) + " | " ;
 }

или вот рабочий код:

            DataSet dset = new DataSet("npdata");
            NpgsqlDataAdapter NpAdapter = new NpgsqlDataAdapter();
            NpAdapter.SelectCommand = new NpgsqlCommand(sql, conn);
            NpAdapter.Fill(dset, "npdata");
            var dtsource = dset.Tables["npdata"];
            dataGridView.DataSource = dtsource;
            dataGridView.DataBind();
0 голосов
/ 05 ноября 2018

Получить все columnName: fieldValue в консоли:

            for(int i=0; i < ds.Tables[0].Rows.Count; i++)
                for(int j=0; j < ds.Tables[0].Rows[i].ItemArray.Length; j++)
                    Console.WriteLine(ds.Tables[0].Columns[j].ToString() + " : " + ds.Tables[0].Rows[i][j].ToString());
0 голосов
/ 14 декабря 2011

Вы можете использовать DataGrid, чтобы показать свой результат:

        DataTable dt = new DataTable();
        dt.Load(reader);
        dataGridView1.DataSource = dt;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...