Ich versuche eine SQL-Abfrage zu schreiben, die eine Gridview nach den eingegebenen Feldern filtert. Es gibt vier Felder, Titel, Vorname, Nachname und Company.Name.
Die ersten drei sind gut, denn sie sind nie null, aber die vierte kann null sein. Die folgende LINQ-Abfrage funktioniert problemlos:
%Vor%Aber wenn ich versuche, einen Filter für die Firma einzufügen, erhalte ich einen Fehler zur Laufzeit, wenn die Firma null ist
%Vor%Was ich gerne wissen würde, ist eine Möglichkeit, die Abfrage so zu erstellen, dass sie nur dann filtert, wenn das Feld client.Company nicht null ist.
Auch bin ich anfällig für SQL-Injection oder dergleichen, wenn ich direkt aus den Textfeldern wie folgt ziehe. Ich weiß in diesem Fall ist es nicht mit der DB verbunden, aber wenn es war, könnten sie einen Tropfen tun. Oder, selbst wenn es nicht mit der db verbunden ist, könnten sie mit den Objekten in der Liste herumspielen?
Danke
Jon Hawkins
Ich nehme an, Sie möchten alle übereinstimmenden Datensätze, in denen Company null ist, aber nach Namen gefiltert werden, wenn das Unternehmen existiert. Folgendes sollte das tun. Außerdem müssen Sie sich keine Gedanken über SQL-Injection machen, da LINQToSQL parametrisierte Abfragen verwendet. Sie müssen sich darum kümmern, HTML zu bereinigen, das sich möglicherweise in den Clientsteuerelementen befindet, wenn Sie beabsichtigen, Einfügungen von ihnen vorzunehmen und einen der Werte im Web anzuzeigen, um XSS-Angriffe zu vermeiden.
%Vor%1) Linq to Sql verwendet Parameter in seinen Abfragen, so dass es nicht anfällig für SQL-Injection ist. VERTRAUEN SIE NIEMALS USER-EINGANG.
2) Linq bietet keine kostenlose Nullprüfung, sorry. Sie können dies mit einer einfachen Erweiterungsmethode erreichen, um Ihre linq-Abfrage zu trimmen und anzupassen:
%Vor%Tags und Links linq