将varchar值'System.Web.UI.WebControls.HiddenField'转换为数据类型int时转换失败

时间:2019-02-23 20:32:42

标签: c# asp.net sql-server

我正在尝试在会话中存储用户ID,但未能成功。请查看下面的代码:

String query = "select count (*) from USERINFO where USERID='" + textuserid.ToString() + "' and USERNAME='" + textusername.Text + "' and MVerifyPass='" + textpassword.Text + "'";

SqlCommand cmd = new SqlCommand(query, con);

String output = cmd.ExecuteScalar().ToString();

if (output == "1")
{
    Session["userid"] = textuserid;
    Session["User"] = textusername.Text;
    Response.Redirect("~/app/Dashboard.aspx");
}
else
{
    Response.Write("Your User ID and Password is wrong!");
}

如何将用户ID存储在会话中,并将varchar转换为int

我们将不胜感激任何帮助。

1 个答案:

答案 0 :(得分:3)

如果您的 textuserid HiddenField 控件,那么,当您将ToString()应用于变量名称时,您将获得类的名称,而不是该类的值。控制。这就是您的错误消息背后的原因。当数据库引擎需要整数值时,会看到类似“ System.Web.UI.WebControls.HiddenField”的字符串。
使用 HiddenField 控件的Value属性可以很容易地解决此问题,但是我建议您忘记这种方法,而使用参数化查询。

String query = @"select count (*) from USERINFO 
                 where USERID=@uid and USERNAME=@name and MVerifyPass=@pass";
SqlCommand cmd = new SqlCommand(query, con);
cmd.Parameters.Add("@uid", SqlDbType.Int).Value = Convert.ToInt32(textuserid.Value);
cmd.Parameters.Add("@name", SqlDbType.NVarChar).Value = textusername.Text;
cmd.Parameters.Add("@pass", SqlDbType.NVarChar).Value = textpassword.Text;
String output = cmd.ExecuteScalar().ToString();
if (output == "1")
{
    Session["userid"] = textuserid.Value;
    Session["User"] = textusername.Text;
    Response.Redirect("~/app/Dashboard.aspx");
}
else
{
    Response.Write("Your User ID and Password is wrong!");
}

参数化查询是避免Sql Injection和解析错误的唯一合理方法