Criando Label em tempo de execução

Boa tarde a todos, tenho um sistema aonde tenho um form, formprincipal, que quero criar label com os cartões de pedidos cadastrados no form, faço um select no banco, e gostaria que criasse os label em um panel que adicionei. Abaixo esta o código…
public partial class FrmPrincipal : Form
{
Label lbl = new Label();
public FrmPrincipal()
{
InitializeComponent();
}

    public void ListaCartao()
    {
        SqlConnection con = clConexao.obterConexao();
        String query = "select * from cartaovenda";
        SqlCommand cmd = new SqlCommand(query, con);
        clConexao.obterConexao();
        cmd.CommandType = CommandType.Text;
        SqlDataReader rd = cmd.ExecuteReader();
        int i = 1;
        while (rd.Read())
        {
            lbl.Location = new Point(5, i * 5);
            lbl.Name = rd["Id"].ToString();
            lbl.BackColor = Color.Transparent;
            lbl.AutoSize = true;
            lbl.Text = rd["numero"].ToString();
            paPrincipal.Controls.Add(lbl);
            i++;
        }
        clConexao.fecharConexao();
    }