Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 转换varchar值时转换失败';System.Web.UI.WebControls.HiddenField';到数据类型int_C#_Asp.net_Sql Server - Fatal编程技术网

C# 转换varchar值时转换失败';System.Web.UI.WebControls.HiddenField';到数据类型int

C# 转换varchar值时转换失败';System.Web.UI.WebControls.HiddenField';到数据类型int,c#,asp.net,sql-server,C#,Asp.net,Sql Server,我正在尝试在会话中存储userid,但失败。请查看以下代码: String query = "select count (*) from USERINFO where USERID='" + textuserid.ToString() + "' and USERNAME='" + textusername.Text + "' and MVerifyPass='" + textpassword.Text + "'"; SqlCommand cmd = new SqlCommand(query,

我正在尝试在会话中存储userid,但失败。请查看以下代码:

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

非常感谢您的帮助。

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

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!");
}

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

在使用textuserid HiddenFieldControl:Ie:textuserid.Value.ToString()时,您可能忘记了使用属性值。但这不是你的主要问题。通过这种方式连接字符串,用户可以在这些文本框中键入任何内容,甚至可以键入可能破坏数据库的有效sql命令。看看Sql注入是如何使用的,参数化查询是如何解决这个大问题的Thankyou@Steve!这是您提供的一个很好的帮助和理解。现在它给出了一个错误“输入字符串的格式不正确”。您确定textuserid包含有效的整数值吗?如果输入不是数字(即使是空白字符串也不是数字),Convert.ToInt32也会发生这种情况。我不明白您为什么需要在查询中检查UserId。通常,在检查有效帐户时,您只需验证用户名和密码,因为不允许有两个具有相同用户名的帐户