【问题标题】:LINQ ignores caseLINQ 忽略大小写
【发布时间】:2011-01-13 13:56:37
【问题描述】:

我有以下 LINQ 语句:

(from o in Table where (o.Username == username && o.Password == password) select o).SingleOrDefault()

这似乎忽略了案例。我如何确保“测试”!=“测试”等。 谢谢

【问题讨论】:

  • 你确定你的SqlServer不区分大小写吗?
  • 另外,请不要在数据库中存储密码。至少,存储密码哈希,根据用户名检索记录并比较哈希。

标签: .net asp.net-mvc linq


【解决方案1】:

LINQ 并没有忽略这种情况,它是 SQL Server。更改 COLLATION 以使 SQL Server 区分大小写。

【讨论】:

    【解决方案2】:

    根据 Klaus 的评论,问题很可能是您的 SQL 服务器 CI 设置

    但是,无论如何存储密码明文都是不好的做法 - 您应该查看 hashing,或者更好的是,使用安全框架(如 ASP.NET Membership)为您管理这些。

    【讨论】:

    • 通常用户名不区分大小写,而密码区分大小写。
    【解决方案3】:

    您使用的是什么 LINQ 提供程序?这很重要。例如。 LINQ to XML 区分大小写,您必须执行 ToUpperVariant() 调用才能变得不区分大小写,并且在 SQL 上,行为可能会因 sql 排序规则设置而异。

    【讨论】:

      猜你喜欢
      • 2018-05-31
      • 2020-07-25
      • 2011-11-17
      • 1970-01-01
      • 1970-01-01
      • 2011-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多