我正在使用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>
我已经尝试了我能想到的一切,但无法让它发挥作用。
答案 0 :(得分:0)
好的,所以我把它解决了。事实证明,这与我正在执行的查询缺少一些与我返回的类型(用户)相匹配的字段这一事实有关。
如果其他人遇到此问题,则会出现错误:
无法执行查询\ r \ n [SELECT * FROM users \ n WHERE username = @ p0 AND \ n
password = @ p1] \ r \ n名称:UserName - 值:admin名称:密码 - 值:System.Byte [] \ r \ n [SQL:
SELECT * FROM users \ n WHERE username = @ p0 AND \ n password = @ p1]
感谢让我更深入地了解ExpectoPatronum