Foros del Web » Programación para mayores de 30 ;) » .NET »

Parameters en MySqlCommand no funcionan

Estas en el tema de Parameters en MySqlCommand no funcionan en el foro de .NET en Foros del Web. Hola a todos! Pues después de haberme creado mi clase BD donde manejo toda la base de datos mysql, me dispongo a probarla. Y para ...
  #1 (permalink)  
Antiguo 09/07/2010, 20:54
 
Fecha de Ingreso: mayo-2005
Ubicación: Vimianzo. A Coruña
Mensajes: 230
Antigüedad: 18 años, 10 meses
Puntos: 1
De acuerdo [SOLUCIONADO]Parameters en MySqlCommand no funcionan

Hola a todos!

Pues después de haberme creado mi clase BD donde manejo toda la base de datos mysql, me dispongo a probarla. Y para ello utilizo el método registrar de la clase usuarios.
Código C++:
Ver original
  1. public static Usuario registrar(string login, string password, string nombre, DateTime cumpreanos)
  2.         {
  3.             MySqlCommand sql = new MySqlCommand("insert into gp_usuarios (login, password, nombre) values (@login,@password,@nombre)");
  4.  
  5.             sql.Parameters.Add(new MySqlParameter("login", System.Data.SqlDbType.VarChar));
  6.             sql.Parameters.Add(new MySqlParameter("password", System.Data.SqlDbType.VarChar));
  7.             sql.Parameters.Add(new MySqlParameter("nombre", System.Data.SqlDbType.VarChar));
  8.             //sql.Parameters.Add(new MySqlParameter("cumpreanos", System.Data.SqlDbType.VarChar));
  9.  
  10.             sql.Parameters["login"].Value = login;
  11.             sql.Parameters["password"].Value = password;
  12.             sql.Parameters["nombre"].Value = nombre;
  13.             //sql.Parameters["cumpreanos"].Value = cumpreanos;
  14.             MySqlConnection conexion = BD.Conexion();
  15.  
  16.             MySqlTransaction t = conexion.BeginTransaction();
  17.  
  18.             if (!(BD.ejecuta(sql, t) == 1))
  19.             {
  20.                 t.Rollback();
  21.                 return null;
  22.             }
  23.  
  24.             Usuario u = new Usuario();
  25.  
  26.             u.login = login;
  27.             u.password = password;
  28.             u.nombre = nombre;
  29.             u.cumpreanos = cumpreanos;
  30.  
  31.             t.Commit();
  32.  
  33.             return u;
  34.         }


Pues parece ser que los MySqlCommand.Parameters no funcionan...es decir, no insertan el valor que se les pasa. Y porqué digo esto?
Porque he probado a sustituir los @ directamente por el valor que quería y comentado la parte de los parameters y me ha insertado la línea perfectamente.
Además, en el control de excepciones que he puesto en en la clase BD, me arroja una que me dice que el campo Login no puede ser NULL...

Alguien tiene idea de como solucionar esto o porqué pasa esto?

Estoy desesperado ya con el MySQL la verdad...
Esta misma clase la importé directamente de una que ya tenía hecha en SQL Server y funcionaba perfectamente...

Gracias por la ayuda y un Saludo!
Muchísimas gracias!
__________________
Técnico Superior en Desarrollo de Apliciones Informáticas

Última edición por Baldur; 11/07/2010 a las 08:04 Razón: Solucionado
  #2 (permalink)  
Antiguo 10/07/2010, 01:32
Avatar de dmassive  
Fecha de Ingreso: febrero-2002
Ubicación: Paraná - Entre Ríos - Argentina
Mensajes: 279
Antigüedad: 22 años, 1 mes
Puntos: 7
Pregunta Respuesta: Parameters en MySqlCommand no funcionan

Hola, quizas podrias colocar el codigo de BD.ejecuta() ya que no se ve como ejecutas la consulta. Y para los parametros yo uso el AddWithValue, te ahorra mucho codigo.
__________________
Blümchen... einfach die rave Prinzessin
http://www.dmassive.com.ar/
  #3 (permalink)  
Antiguo 10/07/2010, 05:35
 
Fecha de Ingreso: mayo-2005
Ubicación: Vimianzo. A Coruña
Mensajes: 230
Antigüedad: 18 años, 10 meses
Puntos: 1
Respuesta: Parameters en MySqlCommand no funcionan

Sí, claro, sin problema.
Este es el método ejecuta(está sobrecargado)
Código C++:
Ver original
  1. public static int ejecuta(MySqlCommand sql, MySqlTransaction t)
  2.         {
  3.             try
  4.             {
  5.                 sql.Connection = BD.Conexion();
  6.  
  7.                 if (t != null) sql.Transaction = t;
  8.  
  9.                 return sql.ExecuteNonQuery();
  10.                 //Catch sqle As SqlException
  11.                 //    sql.Connection.Close()
  12.             }
  13.             catch (Exception e)
  14.             {
  15.                 MessageBox.Show(e.Message, "Se ha producido un fallo", MessageBoxButtons.OK, MessageBoxIcon.Error);
  16.                 return -1;
  17.             }
  18.         }
  19.  
  20.         public static int ejecuta(MySqlCommand sql)
  21.         {
  22.             return BD.ejecuta(sql, null);
  23.         }

pd: gracias por la sugerencia de AddWithValue, pero sigue dando el mismo fallo...
__________________
Técnico Superior en Desarrollo de Apliciones Informáticas
  #4 (permalink)  
Antiguo 10/07/2010, 07:33
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Parameters en MySqlCommand no funcionan

Los parámetros no tienen por nombre login, password y nombre, sino @login, @password y @nombre.
Pruebalos así o bien reemplaza todos los "@" por "?" (incluyendo los parámetros)), que es más usado en MySQL para usar el MySQL Connector .Net:
Código C#:
Ver original
  1. sql.Parameters.Add(new MySqlParameter("@login", System.Data.SqlDbType.VarChar));
  2.             sql.Parameters.Add(new MySqlParameter("@password", System.Data.SqlDbType.VarChar));
  3.             sql.Parameters.Add(new MySqlParameter("@nombre", System.Data.SqlDbType.VarChar));
  4.  
  5.             sql.Parameters["@login"].Value = login;
  6.             sql.Parameters["@password"].Value = password;
  7.             sql.Parameters["@nombre"].Value = nombre;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 10/07/2010, 10:06
Avatar de gedarufi  
Fecha de Ingreso: diciembre-2008
Ubicación: Colombia
Mensajes: 540
Antigüedad: 15 años, 4 meses
Puntos: 22
Respuesta: Parameters en MySqlCommand no funcionan

Lo de si usar @ o ? para los parámetros depende de la versión del conector que se esta usando, con la versión 6.2.2.0 del conector se vuelve indispensable usar @.

Saludos
  #6 (permalink)  
Antiguo 10/07/2010, 11:08
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Parameters en MySqlCommand no funcionan

Ese es un dato interesante. Lamentablemente en los desarrollos que he hecho no he podido usar Visual Studio 2005 o superior, por cuestiones internas de la empresa, lo que me limita a usar el VS2003 y .Net 1.1, por eso decía del uso del "?", ya que es habitual con el MySQL Connector .Net 1.
Es un buen aporte.

Gracias.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 10/07/2010, 16:43
 
Fecha de Ingreso: mayo-2005
Ubicación: Vimianzo. A Coruña
Mensajes: 230
Antigüedad: 18 años, 10 meses
Puntos: 1
Respuesta: Parameters en MySqlCommand no funcionan

Gracias a todos por responder.
Os indico que uso el Visual Studio 2010 Ultimate (cortesía de Microsoft para estudiantes de ingeniería...xD, es decir, que no es pirata)

Antes tenía instalado la versión de MySQL 5. algo, y probé con todo lo que me decíais y nada.
Ahora he instaldo la 6.2.3 de MySQL, y he probado tal y como lo tenía yo, y de todas las formas que indicais, y lo que me dice ahora es: la cadena de entrada no tiene un formato correcto.
Y ya digo, he probado con los @, con las ? y tal y como lo tenía yo antes sólo con las @ en la sentencia... y ahora da siempre ese mensaje...

Alguna idea?

Gracias por todo y perdón por los quebraderos de cabeza xD


PD: acabo de hacer un Debug.Print(sql.CommandText.ToString()); justo antes de la excepción y me muestra lo siguiente: insert into gp_usuarios (login, password, nombre) values (@login,@password,@nombre)
Eso es normal? No debería mostrar ya la cadena con los datos sustidos por los parámetros? Gracias y un Saludo!
__________________
Técnico Superior en Desarrollo de Apliciones Informáticas

Última edición por Baldur; 10/07/2010 a las 17:02
  #8 (permalink)  
Antiguo 10/07/2010, 17:22
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Parameters en MySqlCommand no funcionan

Cita:
PD: acabo de hacer un Debug.Print(sql.CommandText.ToString()); justo antes de la excepción y me muestra lo siguiente: insert into gp_usuarios (login, password, nombre) values (@login,@password,@nombre)
Eso es normal? No debería mostrar ya la cadena con los datos sustidos por los parámetros? Gracias y un Saludo!
Eso es lo normal, porque ese es el contenido de la consulta. Los valores suplantan a los parámetros en el momento de enviar la consulta a MySQL, pero esa etapa no la puedes debuggear porque es interna del conector.
Ahora bien, ¿En qué momento, en qué linea se produce el problema? Supongo que habrás puesto todo el proceso en un Try/Catch, ¿no? Si es así, deteniendo la ejecución dentro del Catch debería mostrarte en qué linea salta el error, y si el error es de C# o de MySQL...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 10/07/2010, 17:44
 
Fecha de Ingreso: mayo-2005
Ubicación: Vimianzo. A Coruña
Mensajes: 230
Antigüedad: 18 años, 10 meses
Puntos: 1
Respuesta: Parameters en MySqlCommand no funcionan

Si, me salta al procesar la transacción llamada t que aparece en el código de la BD.ejecuta. El mensaje que arroja es: "la cadena de entrada no tiene un formato correcto".
Código C++:
Ver original
  1. public static int ejecuta(MySqlCommand sql, MySqlTransaction t)
  2. {
  3.             try
  4.             {
  5.                 sql.Connection = BD.Conexion();
  6.  
  7.                 if (t != null) sql.Transaction = t;
  8.  
  9.                 return sql.ExecuteNonQuery();
  10.             }
  11.             catch (Exception e)
  12.             {
  13.                 MessageBox.Show(e.Message, "Se ha producido un fallo", MessageBoxButtons.OK, MessageBoxIcon.Error);
  14.                 return -1;
  15.             }
  16. }

Gracias por pa ayuda y un Saludo!
__________________
Técnico Superior en Desarrollo de Apliciones Informáticas

Última edición por Baldur; 10/07/2010 a las 20:50 Razón: codigo de BD.Ejecuta
  #10 (permalink)  
Antiguo 11/07/2010, 06:56
 
Fecha de Ingreso: mayo-2005
Ubicación: Vimianzo. A Coruña
Mensajes: 230
Antigüedad: 18 años, 10 meses
Puntos: 1
Respuesta: Parameters en MySqlCommand no funcionan

Me vais a matar....jajajaja.

Es lo que tiene a veces la reutilización de código y no revisar bien lo que cambias...xDD

Me acabo de dar de cuenta que el fallo está en que tenía como tipos de datos los de SQL Server... => System.Data.SqlDataType.Varchar y tiene que ser MySql.Data.MySqlClient.MySqlDbType.VarChar...jajaj a
Al portar la clase que trabajaba con SQL Server a MySQL, cambié todo excepto eso que se me pasó... y no me he dado de cuenta hasta ahora.

Siento muchísimo las molestias de verdad.

Gracias a todos por la ayuda y un Saludo!
__________________
Técnico Superior en Desarrollo de Apliciones Informáticas

Última edición por Baldur; 11/07/2010 a las 08:03

Etiquetas: funcionan, parámetros
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:47.