0

在 stackoverflow 上有一个类似的问题没有得到解答,但我相信我非常接近解决它。但基本上,我的 sql 语句返回多个值,但标签中只显示一个值,而它应该是 4 或 5 个值。

  protected void btnPopulate_Click(object sender, EventArgs e)
    {

        SqlConnection con = new SqlConnection(strings.settings.connectionString);
        SqlCommand command = new SqlCommand("SELECT ID FROM dbo.MDRMASTER WHERE MASTERPID = @MASTERPID",con);
       command.Parameters.Add("@MASTERPID", SqlDbType.NVarChar).Value = txtMASTERID.Text;
        con.Open();
        SqlDataReader dr = command.ExecuteReader();
        while (dr.Read()) 
        {
            string ID = dr["ID"].ToString();
            lblIDs.Text = ID;
        }
        con.Close();
    }

任何帮助将不胜感激。谢谢!

4

3 回答 3

5

每次循环都覆盖标签的文本。你可以简单地改变:

lblIDs.Text = ID;

到:

lblIDs.Text += ID + " ";

并且基本上用空格分隔的列表填充标签。

此外,作为一般最佳实践编程提示:在此示例中,您将 UI 代码与数据访问代码非常紧密地耦合在一起。您应该研究 MVC、Presenter 和其他几个选项以避免紧密耦合。这是一篇针对初学者的文章。

于 2012-05-01T16:42:42.373 回答
5

你的意思是这样的?

var ids = List<string>();
while (dr.Read()) 
{
    ids.Add(dr["ID"].ToString());            
}
lblIDs.Text = String.Join(", ", ids);
于 2012-05-01T16:42:55.377 回答
2

您正在用每个步骤替换文本dr.Read()

尝试以下

var text = new StringBuilder();
while (dr.Read()) 
{
    text.Append(dr["ID"].ToString());
}

lblIDs.Text = text.ToString();
于 2012-05-01T16:44:13.340 回答