0

我在 C# 中有一些用于创建新密码的代码:

SqlCommand cmd = new SqlCommand("select pwdencrypt('" + txtNewPass1.Text + "')", Conn);

现在,这会从文本框 txtNewPass1 中获取我们的文本值并使用 pwdencrypt 对其进行加密,然后再将另一位代码放入数据库(该位使用参数)。

然而,问题是上面的代码没有——实际上似乎也没有。由于某种原因,使用参数(而不是 txtNewPass1.Text)似乎会带回错误的值(实际上,我现在想知道是否可以通过将 txtNewPass1.Text 放入字符串中,然后通过参数传递来解决这个问题) . 至少在这种情况下,使用参数会给我们一个与我们的值不匹配的密码。

其他人以前遇到过这个吗?

4

2 回答 2

5

由于某种原因,唱一个参数(而不是 txtNewPass1.Text)似乎带回了一个错误的值

除非绝对不可能,否则您应该使用参数;varchar任何“错误值”很可能是和之间的区别nvarchar- 所以要小心你知道你想要哪个,你正在使用哪个(pwdencrypt('foo')与 不同pwdencrypt(N'foo'))。还; 考虑hashbytes而不是pwdencrypt

于 2013-07-02T10:04:39.437 回答
4

哦!我真的不想自己回答这个问题,因为我太尴尬了,但是嘿嘿......

SqlCommand cmd = new SqlCommand("select pwdencrypt(@MyPass)", Conn

我留下了单引号,所以它试图加密('@MyPass'),而不是(@MyPass)。因此,每次它都将@MyPass 加密为密码,而不是@MyPass 所代表的内容,因为它将其视为字符串。

别理我,早上太早了。嗯……快到午饭时间了……

于 2013-07-02T10:04:07.240 回答