C# 以表格格式返回多个PostgreSQL值

C# 以表格格式返回多个PostgreSQL值,c#,postgresql,postgis,C#,Postgresql,Postgis,在过去的几天里,我一直在关注这个问题。我通常不会在这里发帖,但我自己搜索出来的东西不起作用。我想查询PostgreSQL并生成多条记录,每条记录都有SELECT语句所指示的多个字段。因为我不知道返回的记录的数量,所以我认为某种while循环是最好的。我似乎无法将所有的值作为一个列表,然后将该列表放入表中,根据需要添加行 NpgsqlConnection pgconn = new NpgsqlConnection(ConfigurationManager.ConnectionStrings["Co

在过去的几天里,我一直在关注这个问题。我通常不会在这里发帖,但我自己搜索出来的东西不起作用。我想查询PostgreSQL并生成多条记录,每条记录都有SELECT语句所指示的多个字段。因为我不知道返回的记录的数量,所以我认为某种while循环是最好的。我似乎无法将所有的值作为一个列表,然后将该列表放入表中,根据需要添加行

NpgsqlConnection pgconn = new NpgsqlConnection(ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString);
pgconn.Open();

NpgsqlCommand command = new NpgsqlCommand("SELECT line, oper, subst_a, from_loc, to_loc, area " + 
                                          "FROM ab_basedata.superpipes_ihs " +
                                          "WHERE gdm_approv = '" + lic_num_lbl + "'", pgconn);

List<List<string>> pipes = new List<List<string>> { };
NpgsqlDataReader dr = command.ExecuteReader();

while (dr.Read())
{
    pipes.Add("Line: " + dr.GetValue(0) + " " + dr.GetValue(1) + " " + dr.GetValue(2) + " " + dr.GetValue(3) + " " + dr.GetValue(4) + " " + dr.GetValue(5) + " Office");

    foreach (List<string> pip in pipes)
    {
        TableRow row = new TableRow();
        TableCell cell1 = new TableCell();
        cell1.Text = string.Join(" ", pipes);
        row.Cells.Add(cell1);
        docTable.Rows.Add(row);
    }
}

您可以在创建如下命令后尝试重新编码这些行

List<List<string>> pipes = new List<List<string>>();
NpgsqlDataReader dr = command.ExecuteReader();

while (dr.Read())
{
    List<string> pip = new List<string>();

    pip.Add("Line:");

    for (int i = 0; i < dr.FieldCount; i++)
        pip.Add(dr.GetString(i));

    pip.Add("Office");

    TableRow row = new TableRow();
    TableCell cell1 = new TableCell();
    cell1.Text = string.Join(" ", pip);
    row.Cells.Add(cell1);
    docTable.Rows.Add(row); 

    pipes.Add(pip);
}

// close DB resources if finished with them
dr.close();
pgconn.close();

我在这里假设,您确实希望将所有数据填充到一个单元格中,而不是每个项目的一个单元格中。如果代码中其他地方不需要管道,则可以将其删除。

在创建如下命令后,可以尝试重新编码这些行

List<List<string>> pipes = new List<List<string>>();
NpgsqlDataReader dr = command.ExecuteReader();

while (dr.Read())
{
    List<string> pip = new List<string>();

    pip.Add("Line:");

    for (int i = 0; i < dr.FieldCount; i++)
        pip.Add(dr.GetString(i));

    pip.Add("Office");

    TableRow row = new TableRow();
    TableCell cell1 = new TableCell();
    cell1.Text = string.Join(" ", pip);
    row.Cells.Add(cell1);
    docTable.Rows.Add(row); 

    pipes.Add(pip);
}

// close DB resources if finished with them
dr.close();
pgconn.close();

我在这里假设,您确实希望将所有数据填充到一个单元格中,而不是每个项目的一个单元格中。如果代码中其他地方不需要管道,则可以将其删除。

这很有效,谢谢。虽然它看起来不好看,但我可能会尝试一些格式设置,或者可能会按列将其拆分,只是不确定我希望获得此信息的深度,因为当用户调出管道信息时,这更多是事后考虑。这很有效,谢谢。虽然它看起来并不漂亮,但我可能会尝试一些格式设置,或者可能会按列将其拆分,只是不确定我希望获得此信息的深度,因为当用户提取管道信息时,这更多是事后考虑。