Domanda

Sto scrivendo una query di selezione in un metodo C # che consente codice client fornire un ID di riga e tornare un oggetto costruito a partire dai dati della riga. Se l'ID di riga è un numero intero e mi hanno confermato che è positiva, non v'è alcun male solo di passaggio attraverso usando string.Format? Io non vedo come alcun danno potrebbe essere fatto se fossero solo permesso di passare in un int e non una stringa.

È stato utile?

Soluzione

Hai ragione, sarebbe sicuro di passare un intero in quel modo. Tuttavia, c'è anche un altro lato della storia.

Mentre può essere considerato come sicuro per formattare solo un int di creare l'espressione SQL, v'è anche una considerazione le prestazioni. Quando il server SQL vede una query per la prima volta, si creerà e memorizzare nella cache il piano di esecuzione per la query. La volta successiva del rilascio della stessa query, il piano di esecuzione verrà riutilizzata.

Se si passa in diverse stringhe, sarà visto come query separate, che richiedono piani di esecuzione separati. Se si passa nella stessa query con parametri di volta in volta (con parametri differenti), il primo piano di esecuzione verrà riutilizzato da SQL Server.

Anche se non si cura per il miglioramento delle prestazioni, vorrei ancora utilizzare una query con parametri per tutte le query sul database, anche per quelli che possono essere considerati "sicuri" come fai notare - semplicemente essere coerenti nel modo in cui l'applicazione accede ai dati. Se sempre usare la query con parametri, si risparmia anche la fatica di determinare se la query è sicuro di volta in volta al fine di decidere in che modo per interrogare il database.

Altri suggerimenti

Si sta rispondendo alla tua domanda qui. System.Int32 non può contenere

';DROP DATABASE xxx;--

Se è questo che ti preoccupa. Anche il superamento di un intero negativo non avrebbe un impatto negativo il database!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top