C# 必须声明标量变量"@用户名";。如何克服它
我的代码总是有我不理解的错误。请帮我输入代码 我想从db for login页面检索用户详细信息C# 必须声明标量变量"@用户名";。如何克服它,c#,C#,我的代码总是有我不理解的错误。请帮我输入代码 我想从db for login页面检索用户详细信息 string uname = TextBox1.Text.Trim(); string pass = TextBox2.Text.Trim(); try { con.Open(); string query = "SELECT user_name, user_password FROM [user] w
string uname = TextBox1.Text.Trim();
string pass = TextBox2.Text.Trim();
try
{
con.Open();
string query = "SELECT user_name, user_password FROM [user] where user_name=@username and user_password=@password";
cmd.Parameters.Add("@username", SqlDbType.VarChar).Value = uname;
cmd.Parameters.Add("@password", SqlDbType.VarChar).Value = pass;
cmd = new SqlCommand(query, con);
cmd.ExecuteNonQuery();
rd = cmd.ExecuteReader();
if (rd.HasRows)
{
Response.Write("Login successful");
}
else
{
Response.Write("login Unsucessful");
}
}
catch (Exception)
{
throw;
}
finally
{
con.Close();
}
}
在添加参数之前,需要创建
cmd
。您的代码应该如下所示:
con.Open();
string query = "SELECT user_name, user_password FROM [user] where user_name=@username and user_password=@password";
cmd = new SqlCommand(query, con);
cmd.Parameters.Add("@username", SqlDbType.VarChar).Value = uname;
cmd.Parameters.Add("@password", SqlDbType.VarChar).Value = pass;
编辑:正如@ekad所说,您不需要
cmd.ExecuteNonQuery()
在添加参数之前,您需要创建cmd
。您的代码应该如下所示:
con.Open();
string query = "SELECT user_name, user_password FROM [user] where user_name=@username and user_password=@password";
cmd = new SqlCommand(query, con);
cmd.Parameters.Add("@username", SqlDbType.VarChar).Value = uname;
cmd.Parameters.Add("@password", SqlDbType.VarChar).Value = pass;
编辑:正如@ekad所说,您不需要
cmd.ExecuteNonQuery()代码>我认为您不需要cmd.ExecuteNonQuery()代码>我认为您不需要cmd.ExecuteNonQuery()代码>我删除了cmd.ExecuteNonQuery();我是否需要进行任何更改以避免sql注入,请提供建议。代码现在运行良好不,您应该很好。@parishparab除了对密码哈希列使用非常混乱的名称外,您的代码还可以。@Alexei Levenkov很抱歉没有得到you@parishparab我假设您存储(无论是否腌制),所以将列命名为“password”有点奇怪。可以存储实际密码和列名,但为什么这样的人会担心SQL注入呢?我删除了cmd.ExecuteNonQuery();我是否需要进行任何更改以避免sql注入,请提供建议。代码现在运行良好不,您应该很好。@parishparab除了对密码哈希列使用非常混乱的名称外,您的代码还可以。@Alexei Levenkov很抱歉没有得到you@parishparab我假设您存储(无论是否腌制),所以将列命名为“password”有点奇怪。可以存储实际的密码和列名,但为什么这样的人会担心SQL注入呢?