elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Análisis del vídeo del hackeo al Sindicato de los Mossos de Esquadra


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  Bases de Datos (Moderador: Carloswaldo)
| | | |-+  error al crear procedimiento almacenado en MySQL [SOLUCIONADO]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: error al crear procedimiento almacenado en MySQL [SOLUCIONADO]  (Leído 8,747 veces)
KandiZickZad

Desconectado Desconectado

Mensajes: 20



Ver Perfil WWW
error al crear procedimiento almacenado en MySQL [SOLUCIONADO]
« en: 12 Octubre 2010, 01:49 »

Buenas! XD

Estoy aprendiendo a programar bases de datos, con MySQL.

Estaba intentando crear el sp siguiente:

Código:
DELIMITER //
CREATE PROCEDURE `bd_planta1`.`consultaPlanta4` (in empleado integer)
BEGIN
        select *
        from empleados
        where (idEmpleado = empleado);
END //
DELIMITER ;

Y al darle click al botón "Create Stored Proc" me retorna este error:

Código:
Error while executing query.

DELIMITER //
CREATE PROCEDURE `bd_planta1`.`consultaPlanta4` (in empleado integer)
BEGIN
        select *
        from empleados
        where (idEmpleado = empleado);
END //
DELIMITER ;

MySQL Error Number 1064
You have and error in your SQL syntax; check the manual that corresponds
to your MySQL server version for the right syntax to use near 'DELIMETER //
CREATE PROCEDURE `bd_planta1`.`consultaPlanta4` (in empleado integ at line 1

No se si sea un fallo mío en cuanto a programación o si es un bugcillo de MySQL que de por si le he visto varios...podría alguien ayudarme? o.o



« Última modificación: 18 Octubre 2010, 00:40 por KandiZickZad » En línea




d(n n)b
Shell Root
Colaborador
***
Desconectado Desconectado

Mensajes: 3.882


Khan


Ver Perfil WWW
Re: error al crear procedimiento almacenado en MySQL
« Respuesta #1 en: 12 Octubre 2010, 02:04 »

Ejemplo,
Código
  1. CREATE PROCEDURE procedure1                    /* name */
  2. (IN parameter1 INTEGER)                        /* parameters */
  3. BEGIN                                        /* start of block */
  4.  DECLARE variable1 CHAR(10);                /* variables */
  5.  IF parameter1 = 17 THEN                    /* start of IF */
  6.    SET variable1 = 'birds';                /* assignment */
  7.  ELSE
  8.    SET variable1 = 'beasts';                /* assignment */
  9.  END IF;                                    /* end of IF */
  10.  INSERT INTO table1 VALUES (variable1);    /* statement */
  11. END

Que es DELIMITER //?


En línea

Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.
KandiZickZad

Desconectado Desconectado

Mensajes: 20



Ver Perfil WWW
Re: error al crear procedimiento almacenado en MySQL
« Respuesta #2 en: 12 Octubre 2010, 02:13 »

DELIMITER lo que hace se supone que es cambiar el delimitador en el codigo...eso lo encontré acá:http://www.brainbell.com/tutorials/MySQL/Using_Stored_Procedures.htm o.o por eso lo puse ahi, pero bueno tampoco estoy segura de necesitar eso.

el ejemplo que me diste si lo inserta bien, luego corri este:

Código:
CREATE PROCEDURE consultaPlanta4 (IN empleado INTEGER)
BEGIN                                       
        select *
        from empleados
        where (idEmpleado = empleado);
END

Y si lo logré asi.

Muchas gracias por la ayuda Shell Root XD al parecer pasé toda la tarde con un error por intentar complicarme la vida jaja
En línea




d(n n)b
KandiZickZad

Desconectado Desconectado

Mensajes: 20



Ver Perfil WWW
Re: error al crear procedimiento almacenado en MySQL
« Respuesta #3 en: 12 Octubre 2010, 02:35 »

Tengo una nueva pregunta sobre el proyecto que estoy haciendo...creo que me esta dando el mismo error, pero ahora desde la aplicación que hice en c# conectada a la misma base de datos que tiene el sp anterior.

Código:
CREATE DEFINER=`root`@`localhost` PROCEDURE `consultaPlanta4`(IN empleado INTEGER)
BEGIN                                       
        select *
        from empleados
        where (idEmpleado = empleado);
END

Estoy segura de que la conexion funciona correctamente, porque ya la he probado con otros sps. Estoy usando MySqlClient para poder establecerla.

Al darle click a button1, realiza una consulta a la bd, enviandole al sp llamado consultaPlanta4 un parametro empleado, lo cual deberia retornar el resultado de la consulta dentro de un datagridview en la ventana:
Código:
ConexionMySQL cn = new ConexionMySQL();
cn.conexion.Open();
cn.comando.CommandText = "consultaPlanta4";
cn.comando.Parameters.Add(new MySqlParameter("empleado", tbIdentificacion.Text));
MySqlDataAdapter da = new MySqlDataAdapter(cn.comando.CommandText, cn.cadenaConexion);
DataTable dt = new DataTable("tabla");
da.Fill(dt);
dataGridView1.Enabled = true;
dataGridView1.DataSource = dt;
cn.comando.ExecuteNonQuery();
cn.conexion.Close();
this.Refresh();

Sin embargo, cuando presiono button1 me devuelve este error:

Código:
An unhandled exception of type 'MySql.Data.MySqlClient.MySqlException' occurred in MySql.Data.dll

Additional information: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'consultaPlanta4' at line 1

Me parece que es el mismo error que retornaba al crear el sp en MySQL... que podré hacer para que se ejecute correctamente?
En línea




d(n n)b
Shell Root
Colaborador
***
Desconectado Desconectado

Mensajes: 3.882


Khan


Ver Perfil WWW
Re: error al crear procedimiento almacenado en MySQL
« Respuesta #4 en: 12 Octubre 2010, 02:51 »

No tendrías que especificar que lo que estás ejecutando es un STORE PROCEDURE y no un QUERY común y corriente?. Así,

Código
  1. ConexionMySQL sCNN = new ConexionMySQL();
  2. MySqlCommand sCMD = new MySqlCommand();
  3. MySqlDataAdapter sAdap = new MySqlDataAdapter();
  4.  
  5. if (sCNN.State == ConnectionState.Open){
  6.   sCMD.CommandType = CommandType.StoredProcedure;
  7.   sCMD.CommandText = "consultaPlanta4";
  8.   sCMD.Parameters.AddWithValue("empleado", this.tbIdentificacion.Text);
  9.   sAdap = New MySqlDataAdapter(sCMD.CommandText, sCNN);
  10.   /* ---ALL CODE--- */
  11. }else{
  12.   /* Conexión cerrada */
  13. }

PD: Estoy en linux, y no verifique nada del código, lo hice de memoria.


« Última modificación: 12 Octubre 2010, 03:35 por Shell Root » En línea

Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.
KandiZickZad

Desconectado Desconectado

Mensajes: 20



Ver Perfil WWW
Re: error al crear procedimiento almacenado en MySQL
« Respuesta #5 en: 12 Octubre 2010, 02:56 »

Umm... es que yo cree la conexion entre MySql y C# usando una clase aparte, entonces alli establecí que comando siempre seria tipo StoredProcedure.

En ese caso, qué podría ser el problema?
En línea




d(n n)b
KandiZickZad

Desconectado Desconectado

Mensajes: 20



Ver Perfil WWW
Re: error al crear procedimiento almacenado en MySQL
« Respuesta #6 en: 12 Octubre 2010, 20:32 »

Ya pude resolver el problema. tuve que crear un método en la clase ConexionMySQL que habia creado (en la cual seteaba el tipo de comando a StoredProcedure)
la clase de conexion que uso es esta

Código
  1. class ConexionMySQL
  2.    {
  3.        public MySqlConnection conexion = new MySqlConnection();
  4.        public String cadenaConexion = "server=localhost; user id=root; password=manager; database=bd_planta1";
  5.        public MySqlCommand comando = new MySqlCommand();
  6.        public DataTable dTable = new DataTable();
  7.        public MySqlDataAdapter da;
  8.  
  9.        public ConexionMySQL()
  10.          {
  11.           conexion.ConnectionString = cadenaConexion;
  12.           comando.CommandType = CommandType.StoredProcedure;
  13.           comando.Connection = conexion;
  14.          }
  15.        public void LlenarDataTable(Dictionary<string,string> Parametros)
  16.        {
  17.            da = new MySqlDataAdapter(comando.CommandText,cadenaConexion);
  18.            da.SelectCommand.CommandType = CommandType.StoredProcedure;
  19.            InicializarParametros(Parametros);
  20.            da.Fill(dTable);
  21.        }
  22.  
  23.        private void InicializarParametros(Dictionary<String, String> listaParametros)
  24.        {
  25.            try
  26.            {
  27.                foreach (KeyValuePair<string, string> par in listaParametros)
  28.                {
  29.                    da.SelectCommand.Parameters.Add(new MySqlParameter(par.Key, par.Value));
  30.                }
  31.            }
  32.            catch (Exception ex)
  33.            {
  34.                MessageBox.Show(ex.Message + " - Error al inicializar parámetros");
  35.            }
  36.        }
  37.    }
  38.  

con esto asi, ya en el form que utiliza el datagridview para llenarlo con los datos que devuelve el sp funciona. acá pongo el código del botón que realiza la consulta a la bd para que vean como.

Código
  1. private void bConsultarPlanta_Click(object sender, EventArgs e)
  2.        {
  3.            ConexionMySQL cn = new ConexionMySQL();
  4.            Dictionary<string, string> Parametros = new Dictionary<string,string>();
  5.            cn.conexion.Open();
  6.            cn.comando.CommandText = "consultaPlanta4";
  7.            Parametros.Add("empleado",tbIdentificacion.Text);
  8.            cn.LlenarDataTable(Parametros);
  9.            dataGridView1.DataSource = cn.dTable;
  10.            cn.conexion.Close();
  11.            cn = null;
  12.            this.Refresh();
  13.        }
  14.  

El problema sí tenía que ver con lo que mencionó Shell Root, ya que al no conectarme directamente a cn, tenia que volver a establecer el tipo del comando. Al final decidí resolverlo de esta manera porque el boton en realidad debe realizar muchas mas consultas y no quería escribir tanto el mismo código.

 Igual, gracias por la ayuda Shell Root XD
En línea




d(n n)b
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines