查询文本和查询参数之间的哈希密码不同

时间:2017-11-27 02:45:29

标签: sql vb.net

我想问一下,查询和参数与hashbytes有什么不同? 我的代码是

.CommandText = "update table.pass " _
& "set password = convert(varchar(12),HASHBYTES('MD5','" & TextEdit3.Text.ToUpper.ToString & "'),2) where userid='" + USER_ID + "'"

我的第二个代码是

.CommandText = "update table.pass " _
& " set password = convert(varchar(12),HASHBYTES('MD5',@pass),2) where userid=@userid"
.Parameters.AddWithValue("@pass", TextEdit3.Text.ToUpper.ToString)
.Parameters.AddWithValue("@userid", USER_ID)

enter image description here

现在iam使用第一个代码,我知道由于sql注入它是错误的。所以我想使用第二个代码。但结果与第一个代码不同。

我想要的是,我如何使用参数但结果与第一个代码相同,因为我的前任使用了第一个

1 个答案:

答案 0 :(得分:2)

我认为nvarchar假设String数据为Add。通常建议使用VarChar并在对将使用哪种数据类型有任何疑问时自行指定数据类型。如果你这样做并指定"set password = convert(varchar(12),HASHBYTES('MD5',N'" ,那么你应该得到相同的结果。

编辑:要么在第一个代码中加上'N'前缀,即

if(value instanceof Array){
         value.forEach((subVal, index)=>{
           let a = subVal.value
           this.form.controls[key].patchValue({index,a})
         })
          //  
      }else{
      this.form.controls[key].patchValue(value);
      }