为什么连接中的第二个命令不起作用?

Why is the 2nd Command inside a Connection does not work?

我试图根据用户在登录文本框中输入的内容在两个 table 中进行测试,所以我测试 LoginName 是否在 Table [=13= 中];否则我会创建一个新命令,它将在另一个 table "Membres" 中查看。 问题是:当我输入 table "Redacteur" 中的登录名时,该命令有效,但是一旦我输入属于 Membres table 的登录名,它就不会将我重定向到我在代码中请求的页面。我认为它甚至没有进入 Else 部分。

using(SqlConnection connect = new SqlConnection(cs))
{
    SqlCommand cmd = new SqlCommand("select * from Redacteurs where RedCode= @lg", connect);
    cmd.Parameters.AddWithValue("@lg", TextLogIn.Text);
    connect.Open();
    //cmd.ExecuteNonQuery();
    SqlDataReader rd = cmd.ExecuteReader();
    if (rd.HasRows)
    {
        rd.Read();
        Session["code"] = rd["RedCode"].ToString();
        Session["loginname"] = TextLogIn.Text;
        Session["pass"] = TextPass.Value;
        Response.Redirect("RedacteurPage.aspx?Redact=" 
            + Session["loginname"].ToString());
        rd.Close();
    }
    else
    {
        cmd = new SqlCommand("select * from Membres where LoginMembre = @lm", connect);
        cmd.Parameters.AddWithValue("@lm", TextLogIn.Text);
        //cmd.ExecuteNonQuery();
        SqlDataReader rd2 = cmd.ExecuteReader();
        if (rd2.HasRows)
        {
            rd2.Read();
            Session["code"] = rd2["MembreCode"].ToString();
            Session["loginname"] = TextLogIn.Text;
            Session["pass"] = TextPass.Value;
            Response.Redirect("ProductCatalogue.aspx?user=" + rd2["FullName"]);
            rd2.Close();
        }
    }
}

您需要close/dispose第一个命令,然后才能在同一连接上执行一个命令。

快速而简单(即可行但不推荐)的解决方案是在 else 块的第一行添加 rd.Close()