1

過去数日間、これにかなりこだわっています。通常はここに投稿しませんが、自分で検索しただけではうまくいきません。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);
    }
}
4

1 に答える 1

1

このようなものを作成した後、行を再コーディングしてみてください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();

ここでは、項目ごとのセルではなく、すべてのデータを 1 つのセルに実際に詰め込みたいと想定しています。pipesコードの他の場所が必要ない場合は、削除できます。

于 2013-05-23T23:13:23.640 に答える