Pregunta

Estoy escribiendo una consulta de selección en un método que permite C # código de cliente proporciona un identificador de fila y volver un objeto construido a partir de los datos de la fila. Si el identificador de fila es un entero y me han confirmado que es positiva, ¿hay algún daño en tan sólo pasándola por el uso de string.Format? No veo cómo cualquier daño podría hacer si sólo se les permitió pasar en un int y no una cadena.

¿Fue útil?

Solución

Tienes razón, sería suficiente para pasar un entero de esa manera. Sin embargo, también hay otra cara de la moneda.

A pesar de que puede ser considerado como seguro para simplemente dar formato a un int crear una expresión SQL, hay también una consideración acerca del rendimiento. Cuando el servidor SQL ve una consulta por primera vez, se va a crear y almacenar en caché el plan de ejecución para esa consulta. La próxima vez que se emita la misma consulta, se volverá a utilizar el plan de ejecución.

Si pasa en diferentes cadenas, que será visto como consultas separadas, que requieren planes de ejecución separadas. Si pasa en la misma consulta con parámetros cada vez (con parámetros diferentes), el primer plan de ejecución será reutilizado por SQL Server.

Incluso si no se preocupan por la mejora en el rendimiento, todavía me gustaría utilizar una consulta parametrizada para todas las consultas en la base de datos, incluso para aquellos que pueden ser considerados "seguros" como usted señala - simplemente para ser consistente en el forma en que la aplicación tiene acceso a los datos. Si siempre utilizar la consulta parametrizada, sino que también le ahorra la molestia de determinar si la consulta es segura cada vez con el fin de decidir en qué forma de consultar la base de datos.

Otros consejos

Usted está respondiendo a su propia pregunta aquí. System.Int32 no puede contener

';DROP DATABASE xxx;--

Si eso es lo que te preocupa. Incluso pasando un entero negativo no impactaría negativamente en su base de datos!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top