【问题标题】:I am getting an error saying System.Data.SqlClient.SqlException: 'Must declare the scalar variable "@Emp_Email".' [closed]我收到一条错误消息,提示 System.Data.SqlClient.SqlException:'必须声明标量变量“@Emp_Email”。' [关闭]
【发布时间】:2020-03-13 17:51:18
【问题描述】:

我的项目是建立一个职业网站。我正在尝试创建一个登录按钮,首先通过检查用户的电子邮件地址和密码来检查用户是否在申请人数据库中,如果他们不在其中,程序会检查他们的电子邮件和密码是否在雇主中数据库,如果它仍然不存在,那么我可以显示一条消息,说明它是无效的电子邮件地址或密码。
检查申请人数据库的部分工作正常,但是当涉及检查它是否在雇主数据库中的部分时,我收到此错误 System.Data.SqlClient.SqlException: 'Must declare the scalar da1.Fill(dt1); 行中的变量“@Emp_Email”。'。表 Employer 包含 Emp_Email 并且我可以看到没有拼写错误。所有表条目都是 NVARCHAR(50) 类型。我被困在这部分。请帮忙。

protected void BtnLogin_Click(object sender, EventArgs e)
        {
            Session["Applicant_Email"] = txtEmail.Text;
            Session["Emp_Email"] = txtEmail.Text;

            string sql = "SELECT Applicant_Email, Password FROM Applicant WHERE Applicant_Email=@Applicant_Email AND Password=@Password";

            string sql1 = "SELECT Emp_Email, Password FROM Employer WHERE Emp_Email = @Emp_Email AND Password=@Password";

            using (SqlConnection connection = new SqlConnection(GetConnectionString()))
            {
                connection.Open();
                using (SqlCommand cmd = new SqlCommand(sql, connection))
                {

                    cmd.Parameters.AddWithValue("@Applicant_Email", txtEmail.Text);
                    cmd.Parameters.AddWithValue("@Password", txtPassword.Text);
                    SqlDataAdapter da = new SqlDataAdapter(cmd);
                    DataTable dt = new DataTable();
                    da.Fill(dt);
                    if (dt.Rows.Count > 0)
                    {
                        Response.Redirect("ViewPage.aspx");
                    }
                    else
                    {
                        connection.Close();

                        using (SqlCommand cmd1 = new SqlCommand(sql1, connection))
                        {
                            connection.Open();
                            cmd.Parameters.Add("@Emp_Email", SqlDbType.NVarChar,50).Value=txtEmail.Text;
                            cmd.Parameters.AddWithValue("@Password", txtPassword.Text);
                            SqlDataAdapter da1 = new SqlDataAdapter(cmd1);
                            DataTable dt1 = new DataTable();
                            da1.Fill(dt1);
                            if (dt1.Rows.Count > 0)
                            {
                                Response.Redirect("ViewPageEmp.aspx");
                            }
                            else
                            {
                                ClientScript.RegisterStartupScript(Page.GetType(), "validation", "<script language='javascript'>alert('Invalid Email and Password! Check again')</script>");
                            }
                        }
                    }
                }
            }
        }

【问题讨论】:

  • 您的第二个 SqlCommand 块中有错字 - 您不是将值添加到新命令,而是第二个。此外,您不应该真的像这样嵌套这些 - 最好它们是顺序的(更具可读性),而且连接不应该在中间关闭/重新打开(else的开始)
  • cmd.Parameters.Add("@Emp_Email", SqlDbType.NVarChar,50).Value=txtEmail.Text; 这行是问题所在。用 cmd1 替换 cmd
  • 好!不好看是我的错。

标签: c# sql asp.net


【解决方案1】:

您将@Emp_Email 添加到cmd 而不是cmd1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    • 2020-10-20
    • 1970-01-01
    • 2019-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多