ArgumentException

Я делаю простую форму входа и получаю следующее исключение

ArgumentException был пойман. Нет соответствия между типом объекта System.Web.UI.WebControls.TextBox и собственным типом известного управляемого поставщика.

Вот код C#

        SqlConnection con = new SqlConnection("Data source=.;Initial catalog=InvoiceSystem;user id =sa;password=rfm");
        SqlCommand cmd = new SqlCommand("spLogin", con);
        cmd.CommandType = CommandType.StoredProcedure;
        SqlParameter p1 = new SqlParameter("username", txtUsername);
        SqlParameter p2 = new SqlParameter("password", txtPassword);
        cmd.Parameters.Add(p1);
        cmd.Parameters.Add(p2);
        try
        {
            con.Open();
            SqlDataReader rd = cmd.ExecuteReader();
            if (rd.HasRows)
            {
                rd.Read();
                Response.Redirect("Default.aspx");
            }
            else
            {
                Response.Write("<script>alert('Invalid Username/Password')</script>");
            }
        }
        catch{

        }

3 ответа

Решение

Вы пытаетесь отправить TextBox объекты к хранимой процедуре:

SqlParameter p1 = new SqlParameter("username", txtUsername);
SqlParameter p2 = new SqlParameter("password", txtPassword);

Он не знает, что делать с этими объектами. Вместо этого просто отправьте текст, содержащийся в этих текстовых полях:

SqlParameter p1 = new SqlParameter("username", txtUsername.Text);
SqlParameter p2 = new SqlParameter("password", txtPassword.Text);

Вы передаете сам TextBox в SqlParameter вместо его текстового значения. Измените это на:

   SqlParameter p1 = new SqlParameter("username", txtUsername.Text);
   SqlParameter p2 = new SqlParameter("password", txtPassword.Text);

Вы должны извлечь текст, используя .Text свойство вроде так:

SqlParameter p1 = new SqlParameter("username", txtUsername.Text);
SqlParameter p2 = new SqlParameter("password", txtPassword.Text);
Другие вопросы по тегам