2011-01-13 7 views
0

Ich habe folgende LINQ-Anweisung:LINQ ignoriert Fall

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

es scheint, dass dieser Fall ignoriert. Wie stelle ich sicher, dass "Test"! = "Test" usw. danke

+5

Sind Sie sicher, dass Ihr SqlServer nicht zwischen Groß- und Kleinschreibung unterscheidet? –

+2

Bitte speichern Sie keine Passwörter in der Datenbank. Speichern Sie mindestens einen Kennwort-Hash, rufen Sie den Datensatz basierend auf dem Benutzernamen ab und vergleichen Sie die Hashwerte. – Robaticus

Antwort

7

LINQ ignoriert nicht den Fall, es ist der SQL Server. Ändern Sie die COLLATION, damit SQL Server die Groß- und Kleinschreibung berücksichtigt.

1

Welchen LINQ-Provider verwenden Sie? Es ist wichtig. Z.B. Bei LINQ to XML ist die Groß-/Kleinschreibung zu beachten, und Sie müssen ToUpperVariant() -Aufrufe ausführen, um die Groß- und Kleinschreibung zu ignorieren. In SQL kann das Verhalten je nach SQL-Sortierreihenfolge variieren.

2

Per Klaus Kommentar, das Problem ist wahrscheinlich, dass Ihr SQL Server CI Einstellung

jedoch sein, ist es schlechte Praxis Passwörter unverschlüsselt auf jeden Fall speichern - Sie bei hashing, oder noch besser aussehen sollte, ein verwenden Sicherheits-Framework (wie ASP.NET Membership), um diese für Sie zu verwalten.

+1

Auch im Allgemeinen sollte Benutzername insensive sein, während das Passwort die Groß- und Kleinschreibung unterscheidet. –