以表格式返回多个PostgreSQL值

本文关键字:PostgreSQL 返回 表格 格式 | 更新日期: 2023-09-27 18:15:00

在过去的几天里,我一直在纠结这个问题。我通常不会在这里发布,但我试图想出的只是搜索我自己的工作。我想查询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);
    }
}

以表格式返回多个PostgreSQL值

您可以尝试在创建command后像这样重新编码行…

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();

我在这里假设你真的想把所有的数据塞进一个单元格,而不是每个项目一个单元格。如果您在代码的其他地方不需要pipes,那么可以删除它。