C# 必须声明标量变量"@用户名";。如何克服它

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

我的代码总是有我不理解的错误。请帮我输入代码 我想从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] 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注入呢?