[英]How to match case-sensitive username and password
我正在尝试使用 sql server 在 C# 中使用 linq 匹配用户名和密码
//verify the user.
var UserDetails =
(from user in con.ios_Users
where (user.LOGIN == LogReq.userName && user.PASSWORD == LogReq.password && user.ACTIVE != 0)
select new
{
user.ID,
user.TYPEDESCR,
user.USERNAME
}).ToList();
在上面的代码中,如果我传递用户名 - 演示和密码 - demo123,它返回数据用户数据,但在数据库用户名是 - DeMo 和密码是 DeMo123 如何使这个 linq 查询区分大小写:(
提前致谢 :)
它看起来像一个数据库整理问题: https : //docs.microsoft.com/en-us/sql/relational-databases/collations/collation-and-unicode-support?view= sql-server- ver15
SQL Server 中的排序规则为您的数据提供排序规则、大小写和区分重音属性。 与字符数据类型(例如 char 和 varchar)一起使用的排序规则规定了可以为该数据类型表示的代码页和相应的字符。
以上是针对 MsSql 但它适用于大多数主流数据库。
如果你使用的是 linqToSql,那么 linq 就会变成查询并在数据库中执行,所以实际的比较发生在 SQL 端。
所以你需要在你的桌子上修复排序规则。
默认情况下,C# 中的字符串比较区分大小写(除非您使用特定的字符串比较机制)。
看你怎么说:
但在数据库用户名是
假设您正在使用某种 LinQ to SQL,罪魁祸首很可能是您的列的设置方式。 默认情况下,某些数据库引擎以不区分大小写的方式匹配字符串,这里似乎也是这种情况。
你应该使用String.Equals
//verify the user.
var UserDetails =
(from user in con.ios_Users
where (string.Equals(user.LOGIN, LogReq.userName, StringComparison.InvariantCultureIgnoreCase) && string.Equals(user.PASSWORD, LogReq.password , StringComparison.InvariantCultureIgnoreCase) && user.ACTIVE != 0)
select new
{
user.ID,
user.TYPEDESCR,
user.USERNAME
}).ToList();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.