Frage

Ich bin eine Auswahlabfrage in einer C # Methode schreiben, die Client-Code eine Reihe ID liefern kann und ein aus der Zeile der Daten konstruiertes Objekt zurück. Wenn die Zeilen-ID eine ganze Zahl ist und ich bestätigt haben, es ist positiv, gibt es einen Schaden in nur um es durch den Einsatz von string.Format vorbei? Ich sehe nicht, wie ein Schaden getan werden könnte, wenn sie nur in einem int durchgelassen wurden und kein String.

War es hilfreich?

Lösung

Du hast recht, wäre es sicher eine ganze Zahl, Art und Weise passieren. Allerdings gibt es auch eine andere Seite der Geschichte.

Während es als sicher angesehen werden kann, um nur ein int-Format eines den SQL-Ausdruck erstellen, gibt es auch eine Leistung Betracht. Wenn der SQL-Server eine Abfrage zum ersten Mal sieht, wird es den Ausführungsplan für die Abfrage erstellen und zwischenzuspeichern. Das nächste Mal die gleiche Abfrage ausgegeben wird, wird der Ausführungsplan wiederverwendet werden.

Wenn Sie in verschiedenen Zeichenfolgen übergeben, wird sie als separate Abfragen zu sehen, wobei eine getrennte Ausführungspläne. Wenn Sie in der gleichen parametrisierte Abfrage jedes Mal (mit unterschiedlichen Parametern) passieren, wobei der erste Ausführungsplan wiederverwendet von SQL Server wird.

Auch wenn Sie nicht über die Leistung profitieren egal, ich würde immer noch eine parametrisierte Abfrage für alle Abfragen für die Datenbank verwenden, auch für diejenigen, die „sicher“, wie Sie darauf hinweisen, in Betracht gezogen werden können - einfach konsequent zu sein in der Art und Weise der Anwendung greift auf die Daten. Wenn Sie immer die parametrisierte Abfrage verwenden, es spart auch die Mühe, zu bestimmen, ob die Abfrage jedes Mal, um sicher zu entscheiden, in welcher Art und Weise die Datenbank abzufragen.

Andere Tipps

Sie beantworten Ihre eigene Frage hier. System.Int32 kann nicht enthalten

';DROP DATABASE xxx;--

Wenn das, was Sie sich Sorgen machen. Selbst eine negative ganze Zahl geben würde Ihre Datenbank nicht negativ beeinflussen!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top