1

我正在使用 nHibernate 尝试使用命名查询登录用户,但他们的密码经过哈希处理,因此存储为 MS SQL DB 中的二进制字段。但是我无法让登录代码工作。它抛出一个错误:

using (var session = sessionFactory.OpenSession())
{
  user = (CreamUser)session.GetNamedQuery("loginuser")
         .SetString("UserName", userName)
         .SetBinary("Password", hashedPassword).UniqueResult();

}

<sql-query name="loginuser">
    <query-param name="UserName" type="string" />
    <query-param name="Password" type="binary" />
    <return alias="User" class="components.User"/>
    <![CDATA[
    SELECT * FROM users 
    WHERE username=:UserName AND 
    password=:Password 
    ]]>
</sql-query>

我已经尝试了我能想到的一切,但无法让它发挥作用。

4

1 回答 1

0

好的,所以我解决了。我发现这与我正在执行的查询缺少一些与我返回的类型(用户)匹配的字段有关。

如果其他人遇到此问题,这是错误:

无法执行查询\r\n[ SELECT * FROM users \n WHERE username=@p0 AND \n
password=@p1 ]\r\n Name:UserName - Value:admin Name:Password - Value:System.Byte[] \r\n[SQL: SELECT * FROM users \n WHERE username=@p0 AND \n password=@p1]

谢谢你让我看起来更深入 ExpectoPatronum

于 2012-08-02T20:55:44.300 回答