Dos cuestiones acerca de ejecutar sentecias sql sobre SQL Server

09/09/2006 - 16:55 por [Juanjo] | Informe spam
Buenas grupo:

Tengo un par de dudas acerca de ejecutar sentencias en SQL SERVER.

Tengo una aplicacion C# 2005 y una base de datos sql server 2005, y la
forma de ejecutar las sentencias
sql es construyendo la sentecia a "mano" y luego ejecutando (no uso
procedimientos almacenados):
1. PREGUNTA:
Para sentencias de insercion o modificacion, si todo los datos de un cuadro
de texto, p.e., como
puedo proteger estas cadenas, porque si meten una comilla ( ' ), da un error
porque considera esta
comilla como parte de la sentencia y no de la cadena.
2. PREGUNTA:
Cuando hago un select para recoger datos y mostrarlo por ejemplo en un
combo, si el campo quiero
mostrar de la base de datos es una cadena de 50 caracteres, en el combo
muestra cadenas de 50
caracteres, aunque no ocupen esos 50 caracteres. se que esto se puede
solucionar con la funcion
Trim() de la clase String o cuando construyo la sentencia con las funciones
sql ltrim o rtrim. Pero hay alguna
forma de configurar el sql server, o la clase DataTable para que
"automaticamente" haga esto?.


Muchas gracias.

Un saludo
 

Leer las respuestas

#1 Octavio Hernandez
11/09/2006 - 17:11 | Informe spam
Juanjo,

Construir la sentencia SQL "a mano" (formalmente, a eso se le dice "SQL
dinámico") está cayendo en franco desuso
desde que se conoce su vulnerabilidad ante los ataques conocidos como
"inyección de SQL". Te recomiendo cambiar
ese SQL dinámico por SQL parametrizado, que es mucho más seguro además de
más eficiente.

La idea es en lugar de construir la sentencia así:

"INSERT INTO Clientes(Nombre, Apellidos) VALUES('" + txt1.Text + "','" +
txt2.Text + "')"

Tenerla ya compilada de antemano así:

"INSERT INTO Clientes(Nombre, Apellidos) VALUES(@P1, @P2)"

(@P1 y @P2 son parámetros)

Antes de ejecutarla, asignas los valores de los TextBox a los dos
parámetros:

sqlCommand1.Parameters["@P1"].Value = txt1.Text;
sqlCommand1.Parameters["@P2"].Value = txt2.Text;

Con este enfoque desaparecería el problema del apóstrofe dentro de las
cadenas, y evitarías la inyección de SQL.

Slds - Octavio


"[Juanjo]" escribió en el mensaje
news:
Buenas grupo:

Tengo un par de dudas acerca de ejecutar sentencias en SQL SERVER.

Tengo una aplicacion C# 2005 y una base de datos sql server 2005, y la
forma de ejecutar las sentencias
sql es construyendo la sentecia a "mano" y luego ejecutando (no uso
procedimientos almacenados):
1. PREGUNTA:
Para sentencias de insercion o modificacion, si todo los datos de un
cuadro de texto, p.e., como
puedo proteger estas cadenas, porque si meten una comilla ( ' ), da un
error porque considera esta
comilla como parte de la sentencia y no de la cadena.
2. PREGUNTA:
Cuando hago un select para recoger datos y mostrarlo por ejemplo en un
combo, si el campo quiero
mostrar de la base de datos es una cadena de 50 caracteres, en el combo
muestra cadenas de 50
caracteres, aunque no ocupen esos 50 caracteres. se que esto se puede
solucionar con la funcion
Trim() de la clase String o cuando construyo la sentencia con las
funciones sql ltrim o rtrim. Pero hay alguna
forma de configurar el sql server, o la clase DataTable para que
"automaticamente" haga esto?.


Muchas gracias.

Un saludo



Preguntas similares