c#中的等于是真的

Sha*_*chi 1 c# equals webmethod

我在c#中做webmethod.在调试时,

(chk.Equals(oldpass))
Run Code Online (Sandbox Code Playgroud)

查询在左侧和右侧显示相同的值.

但是,如果执行移动到显示return语句的else部分,而不是进入内部.FOLL.是我的代码.

[WebMethod (Description="for change in password")]
public string update(string authenid,string oldpass,string newpass)
{
     SqlConnection conn = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=D:\\Workspace\\visual studio workspace\\Tmrepo\\App_Data\\tmrepo.mdf;Integrated Security=True;User Instance=True");

    try
    {
        conn.Open();

  string chk = "select pwd from client where authenid = '"+ @authenid +"' ";
        if(chk.Equals(oldpass))
        {
            string update = "update client set pwd=@newpass where pwd=@oldpass and authenid=@authenid";
            SqlCommand cmd = new SqlCommand(update, conn);
            cmd.Connection = conn;
            cmd.Parameters.AddWithValue("@authenid", authenid);
            cmd.Parameters.AddWithValue("@oldpass", oldpass);
            cmd.Parameters.AddWithValue("@newpass", newpass);
            cmd.ExecuteNonQuery();

        }

        else
        {
            return "invalid oldpass";
        }
 conn.Close();
        return newpass;
    }
    catch (Exception ex)
    {
        return ex.ToString();
    }

}
Run Code Online (Sandbox Code Playgroud)

这段代码有什么问题吗?我是新手.谢谢.

Mar*_*ell 5

您还没有执行命令:您的旧密码chk是:"从客户端选择pwd,其中authenid ='"+ @authenid +"'";,这是一个不太可能的密码.例如,查看ExecuteScalar.

其他想法:

  • 参数化sql - 不要连接id; 它应该是"select pwd from client where authenid = @authenid";您添加以authenid值from 命名的参数的位置authenid.您可以在第二个ADO.NET查询中获得此权限.
  • 密码应该加盐和散列:不要直接存储; 您永远不能提取和/或解密密码

(外部编辑)

更新:执行代码"select pwd from client where authenid = '"+ @authenid +"' ";因为"select pwd from client where authenid = '@authenid' ";返回null值.

update2: cmd.ExecuteScalar();使它工作.并删除cmd.ExecuteNonQuery();