Как сопоставить имя пользователя и пароль с учетом регистра - PullRequest
2 голосов
/ 15 января 2020

Я пытаюсь сопоставить имя пользователя и пароль, используя linq в C#, используя sql сервер

    //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 чувствительным к регистру: (

Заранее спасибо:)

Ответы [ 3 ]

2 голосов
/ 15 января 2020

Похоже, проблема сортировки базы данных: https://docs.microsoft.com/en-us/sql/relational-databases/collations/collation-and-unicode-support?view=sql-server-ver15

Параметры сортировки в SQL Сервер предоставляет правила сортировки, свойства регистра и свойства чувствительности для ваших данных. Параметры сортировки, которые используются с символьными типами данных, такими как char и varchar, определяют кодовую страницу и соответствующие символы, которые могут быть представлены для этого типа данных.

Выше приведено для Ms Sql, но оно применяется для большинства основных баз данных.

Если вы используете linqTo Sql, то linq превращается в запрос и выполняется в базе данных, поэтому фактическое сравнение происходит на стороне SQL.

Так что вам нужно исправить сопоставление на вашем столе.

0 голосов
/ 15 января 2020

Сравнение строк чувствительно к регистру по умолчанию в C# (если вы не используете определенные c механизмы сравнения строк).

Видя, как вы говорите, что:

, но в имя пользователя базы данных:

Предполагается, что вы используете какой-то тип LinQ для SQL, скорее всего виновником является способ настройки вашего столбца. По умолчанию некоторые механизмы БД сопоставляют строки без учета регистра, что, похоже, и в этом случае.

0 голосов
/ 15 января 2020

Вы должны использовать 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();
...