0

现在,我有下面的准备好的声明,它有效:

SELECT email, password
FROM Professor 
WHERE email = ? AND password = HASHBYTES('SHA1','" + password + "') 

p.setString(1, email);

但是,当我尝试参数化要由HASHBYTES加密的值(在本例中为变量'password')时,会出现某种不返回结果的读取/类型/转换错误。这是不起作用的代码:

SELECT email, password
FROM Professor 
WHERE email = ? AND password = HASHBYTES('SHA1', ?) 

p.setString(1, email);
p.setString(2, password);

我根本没有收到任何错误消息;结果集在 rowCount 属性中返回“-3”。我正在使用SQL Server

像这样传递“密码”占位符:“?” 也不起作用。参数化此查询的正确方法是什么?

4

2 回答 2

1

使用您都指出的信息并研究如何在 SQL Server 中转换类型,我得出以下代码:

select email, password
  from Professor
 where email = ?
   and senha = hashbytes('sha1', convert(varchar, ?))

请验证它是否适合您!

于 2016-05-09T03:22:11.007 回答
0

查看准备好的语句中的这个 SQL Server sha1 值给出的值与硬编码字符串不同

ps 以这种方式回答,因为我还不能文本评论。

于 2016-04-26T19:58:01.707 回答