0

如何在 Linq to sql 中编写区分大小写的查询。

目前我的查询是:

   var userResults = from u in Adm.Registrations   
                     where u.UserName == userName && u.Password ==  passWord 
                     select u;

谢谢,

4

3 回答 3

4

永远不要将密码以纯文本形式存储在数据库或其他任何地方。绝不。这是不好的。

http://www.codinghorror.com/blog/2007/09/youre-probably-storing-passwords-incorrectly.html

我的意思是不要将 Reddit 开发人员的好名字拖入泥潭。我们都有罪。我敢肯定,每个阅读本文的开发人员在其职业生涯的某个阶段都将密码存储为纯文本。我知道我有。忘记责备。重要的是要告诉我们的同行在数据库中存储明文密码是严格禁止的——有更好的方法,从基本的哈希开始。

使用这些参考资料可帮助您确定最佳行动方案。有多种方法可以给这只猫剥皮。我意识到更改存储密码的方式并不是对您最初问题的直接回答,并且会涉及到您的更多工作,但它会避免更多的麻烦。

这是解决纯文本问题的非常详尽的指南:http: //www.codeproject.com/Articles/14537/The-Art-Science-of-Storing-Passwords

这些链接也很有启发性: 加盐密码:最佳实践?

密码哈希的非随机盐

我希望这比最初的警告更有帮助。

于 2012-07-17T06:06:43.453 回答
2

如果您尚未将数据库配置为执行区分大小写的比较,则需要在从数据库中获取结果后在内存中执行比较。

var users = Adm.Registrations
               .Where(u => u.UserName == userName && u.Password == password)
               .ToList() // this will load data into memory
               // Now perform a case-sensitive query on the in-memory data
               .Where(u => u.UserName == userName && u.Password == password); 

另一种选择是更改数据库的排序规则以执行区分大小写的搜索,但要小心,因为这可能会导致在其他查询或存储过程中获得的结果少于预期。

于 2012-07-17T06:43:25.333 回答
0

尝试这个

var userResults = from u in Adm.Registrations 
                      where u.UserName .Equals(userName,StringComparison.InvariantCultureIgnoreCase) && u.Password.Equals(passWord,InvariantCultureIgnoreCase)
                      select u;
于 2012-07-17T06:07:02.457 回答