Paso de una variable a una sentencia SQL

08/11/2004 - 23:17 por Paola Cardoso | Informe spam
Hola! ¿Cómo se puede pasar el valor de una variable a una sentencia SQL?

Preguntas similare

Leer las respuestas

#1 MasterNet
09/11/2004 - 01:21 | Informe spam
Pues podés concatenar el valor.

Ejemplo:

Dim SQL as string = "Select * from Empleados"

y quiero agregar una clásula where digamos por edad donde el parámetro está
en un textbox.

SQL = SQL & " where edad = " & Me.TextBox1.Text

Ahora es cuestión de ejecutar esa sentencia SQL contra la conexión de tu
base de datos.

MasterNET
Respuesta Responder a este mensaje
#2 Eduardo A. Morcillo [MS MVP VB]
09/11/2004 - 03:54 | Informe spam
Pues podés concatenar el valor.



Mala idea. Concatenar datos ingresados por el usuario en una instruccion SQL
es inseguro por la inyeccion de codigo. Esto significa que el usuario puede
ejecutar una sentencia SQL a traves del ingreso de algun dato aparentemente
inocente. Por ejemplo algo comun para un login es:

sql = "select * from usuario where login='" & usuario & "' and contraseña='"
& contraseña & "'"

Esto permite al usuario ingresar sin contraseña si ingresa como contraseña
algo asi: ' OR 1=1 --a123 ya que la concatenacion quedaria asi: (recordar
que -- inicia un comentario)

select * from usuario where login='usuario' and contraseña='' or 1=1 --'

De la misma forma puede ejecutar cualquier otra sentencia SQL extra ya que
las puede separar con ;. Y si le agregas que muchas veces se usa el usuario
SA para conexion, un usuario malintencionado podria hasta eliminar la base
de datos completa o hacer cosas peores.

Ese es el principal motivo para no concatenar valores (ingresados por el
usuario) al que se le agregan los problemas de formatos y el clasico
problema con los apostrofes en los strings.

La solucion es usar parametros para ejecutar las consultas (que los
parametros no son solo para procedimientos almacenados!). Ejemplo simple:

Dim cmd As New SqlCommand("SELECT COUNT(*) FROM Usuario WHERE
Usuario=@Usuario AND Contraseña=@Contra", cnx)

cmd.Parameters.Add("@Usuario", TxtUsuario.Text)
cmd.Parameters.Add("@Contra", TxtContraseña.Text)

If cmd.ExecuteScalar = 1 Then

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida