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);