ArgumentException的

时间:2015-06-28 18:46:51

标签: c# sql stored-procedures argumentexception ionic-zip

我正在制作一个简单的登录表单并获得以下例外

  

发现了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 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

您正在将TextBox本身传递给SqlParameter而不是它的文本值。将其更改为:

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

答案 2 :(得分:1)

您必须使用.Text属性提取文本,如下所示:

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