error No se han especificado valores para algunos de los parámet ro

09/01/2009 - 17:59 por julian david | Informe spam
me sale este error "No se han especificado valores para algunos de los
parametros requeridos" ejecuto el comando por una clase .
el comando es el siguiente

fs.actualizar("select * from ficha_tecnica where codigo_eq=" +
txtcodigo.Text + "","update ficha_tecnica set fecha='" + txtfecha.Text +
"',nombre='" + txtnombre.Text + "',carnet='" + txtcarnet.Text + "',usuario='"
+ txtusuario.Text + "',cargo='" + txtcargo.Text + "',nombre_del_equipo='" +
txtnombredelequipo.Text + "',serie_cpu='" + txtseriecpu.Text +
"',marca_cpu='" + txtmarcacpu.Text + "',serie_monitor='" +
txtseriemonitor.Text + "',marca_monitor='" + txtmarcamonitor.Text +
"',tipo_monitor='" + txttipomonitor.Text + "',direccion_ip='" +
txtdireccionip.Text + "',provedor='" + txtprovedor.Text + "',fecha_compra='"
+ txtfechacompra.Text + "',fecha_garantia='" + txtfechagarantia.Text +
"',fecha_actualizacion='" + Convert.ToString(DateTime.Now.ToLongDateString())
+ "' where codigo_eq=" + txtcodigo.Text + "");

estan identicos a la base de datos nose por q me sale este error.

y tambien me gustaria saber si es posiblre guardar datos con un solo comando
en una BD en dos tablas a la vez yo se hacer esto para una consulta en un
datadrid pues mostrar las dos en la misma consulta pero me gusta hacerlo
igual para guardar logicamente estando las tablas relacionadas en este caso
por codigo de equipo

Preguntas similare

Leer las respuestas

#1 Alberto Poblacion
09/01/2009 - 20:07 | Informe spam
"julian david" wrote in message
news:
me sale este error "No se han especificado valores para algunos de los
parametros requeridos" ejecuto el comando por una clase .
el comando es el siguiente

fs.actualizar("select * from ficha_tecnica where codigo_eq=" +
txtcodigo.Text + "","update ficha_tecnica set fecha='" + txtfecha.Text +
"',nombre='" + txtnombre.Text + "',carnet='" + txtcarnet.Text +
"',usuario='"
+ txtusuario.Text + "',cargo='" + txtcargo.Text + "',nombre_del_equipo='"
+
txtnombredelequipo.Text + "',serie_cpu='" + txtseriecpu.Text +
"',marca_cpu='" + txtmarcacpu.Text + "',serie_monitor='" +
txtseriemonitor.Text + "',marca_monitor='" + txtmarcamonitor.Text +
"',tipo_monitor='" + txttipomonitor.Text + "',direccion_ip='" +
txtdireccionip.Text + "',provedor='" + txtprovedor.Text +
"',fecha_compra='"
+ txtfechacompra.Text + "',fecha_garantia='" + txtfechagarantia.Text +
"',fecha_actualizacion='" +
Convert.ToString(DateTime.Now.ToLongDateString())
+ "' where codigo_eq=" + txtcodigo.Text + "");



Bueno, la sentencia es bastente "guarrilla". Para empezar, tiene dos
claúsulas Where, y además creo que hay unas comillas que están mal detrás
del primer txtCodigo.Text. Y en cualquier caso, es una sentencia
peligrosísima porque es susceptible de ataques de inyección de SQL, además
de que dará errores si en alguno de los textboxes se introduce un carácter
reservado (por ejemplo, un texto que contenga una comilla).

Para evitarlo, es preferible parametrizar la sentencia y luego asignar
los valores de los textboxes a los parámetros. De esa forma, además de
evitar los problemas mencionados, la sentencia quedará mucho más "limpia" en
el fuente, porque no hay que concatenarle nada ni introducir ninguna
comilla, con lo que será más fácil detectar de un vistazo los errores que
pueda contener.

y tambien me gustaria saber si es posiblre guardar datos con un solo
comando
en una BD en dos tablas a la vez



Podrías meter en el comando las dos sentencias de modificación separadas
por un punto y coma, o bién llamar desde el comando a un procedimiento
almacenado que internamente realice las modificaciones sobre las dos tablas.
Respuesta Responder a este mensaje
#2 julian david
09/01/2009 - 22:42 | Informe spam
"Alberto Poblacion" wrote:

"julian david" wrote in message
news:
> me sale este error "No se han especificado valores para algunos de los
> parametros requeridos" ejecuto el comando por una clase .
> el comando es el siguiente
>
> fs.actualizar("select * from ficha_tecnica where codigo_eq=" +
> txtcodigo.Text + "","update ficha_tecnica set fecha='" + txtfecha.Text +
> "',nombre='" + txtnombre.Text + "',carnet='" + txtcarnet.Text +
> "',usuario='"
> + txtusuario.Text + "',cargo='" + txtcargo.Text + "',nombre_del_equipo='"
> +
> txtnombredelequipo.Text + "',serie_cpu='" + txtseriecpu.Text +
> "',marca_cpu='" + txtmarcacpu.Text + "',serie_monitor='" +
> txtseriemonitor.Text + "',marca_monitor='" + txtmarcamonitor.Text +
> "',tipo_monitor='" + txttipomonitor.Text + "',direccion_ip='" +
> txtdireccionip.Text + "',provedor='" + txtprovedor.Text +
> "',fecha_compra='"
> + txtfechacompra.Text + "',fecha_garantia='" + txtfechagarantia.Text +
> "',fecha_actualizacion='" +
> Convert.ToString(DateTime.Now.ToLongDateString())
> + "' where codigo_eq=" + txtcodigo.Text + "");

Bueno, la sentencia es bastente "guarrilla". Para empezar, tiene dos
claúsulas Where, y además creo que hay unas comillas que están mal detrás
del primer txtCodigo.Text. Y en cualquier caso, es una sentencia
peligrosísima porque es susceptible de ataques de inyección de SQL, además
de que dará errores si en alguno de los textboxes se introduce un carácter
reservado (por ejemplo, un texto que contenga una comilla).

Para evitarlo, es preferible parametrizar la sentencia y luego asignar
los valores de los textboxes a los parámetros. De esa forma, además de
evitar los problemas mencionados, la sentencia quedará mucho más "limpia" en
el fuente, porque no hay que concatenarle nada ni introducir ninguna
comilla, con lo que será más fácil detectar de un vistazo los errores que
pueda contener.

> y tambien me gustaria saber si es posiblre guardar datos con un solo
> comando
> en una BD en dos tablas a la vez

Podrías meter en el comando las dos sentencias de modificación separadas
por un punto y coma, o bién llamar desde el comando a un procedimiento
almacenado que internamente realice las modificaciones sobre las dos tablas.

gracias pero no entiendo tu solucion a ninguno de los dos, el primero tiene dos where por q uno es para consultar si el codigo ya existe si si se actualiza este, si te que facil me podriar esplicarmejor con un ejemplo o simple mente con la linea de codigos, y no entiendo por q dices de guarrilla si es q la actualizacion la tengo dentro de una clase por eso solo mando los comandos oled y listo
Respuesta Responder a este mensaje
#3 Alberto Poblacion
10/01/2009 - 10:54 | Informe spam
"julian david" wrote in message
news:
gracias pero no entiendo tu solucion a ninguno de los dos,


el primero tiene dos where por q uno es para consultar
si el codigo ya existe si si se actualiza este,



Perdón, al principio me pareció que era un único argumento con toda la
sentencia, ahora veo que estás llamando a una función pasándole dos
argumentos, y que uno es un Select y el otro es un Update, cada uno con su
correspondiente Where.

si te que facil
me podriar esplicarmejor con un ejemplo o simple mente
con la linea de codigos, y no entiendo por q dices de guarrilla



Bueno, con lo de "guarrilla" me refería a que veía un par de errores de
sintaxis dentro de la sentencia (porque la veía mal, me parecía que era una
sola, cuando en realidad eran dos).

si es q la actualizacion la tengo dentro de una clase por eso solo mando
los comandos oled y listo



Da igual que la hagas dentro de una clase. Si concatenas dentro de una
sentencia SQL un texto introducido por un usuario, si el usuario escribe un
fragmento de SQL, al concatenarlo con el resto de la sentencia, puede
conseguir ejecutar sus propias instrucciones sobre el servidor de base de
datos.

Por ejemplo, supongamos que tienes una sentencia como esta:

"Select * from MiTabla where Campo='"+txtCampo.Text+"'";

Si el usuario, dentro del txtCampo, teclea esto (sin las comillas):
"';Delete from Tabla1--", ya te puedes imaginar lo que sucede...

Eso se evita parametrizando la sentencia:

string sentencia = "Select * from MiTabla where Campo=?";
OleDbCommand cmd = new OleDbCommand(sentencia, conexion);
cmd.Parameters.AddWithValue("parm1", txtCampo.Text);

De esta forma, no sólo se evitan los ataques de inyección de SQL, sino
que también funciona cuando en el txtCampo te introducen un texto tal como
"O'Donell" (con una comilla), que de lo contrario produciría un error.
Además también vale cuando hay que añadir una fecha (no te tienes que
preocupar de concatenarla con el formato adecuado) o cuando hay un parámetro
numérico (no te tienes que preocupar de separar los decimales con un punto
en lugar de una coma).
Una ventaja adicional es que la sentencia queda mucho más limpia (cada
parámetro es una "?", y no hay que encerrarla entre comillas), con lo que se
aprecian mucho más fácilmente los posibles errores de sintaxis que pueda
contener, que en la sentecia "gorda" (con todas las concatenaciones) no se
ven a simple vista.
Respuesta Responder a este mensaje
#4 julian david
14/01/2009 - 15:40 | Informe spam
listo hermano problema solucinado despudes de revisarlo un monton, entonces
el error en la programacion ubicavba un campo como provedor mientras en la
base de datos esta como proverdor ese era el problema gracias me sirvio de
mucho lo que me enseñaste de parametrisar los campos BIEN
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida