Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] Creación de Store Procedure con Parametros

Estas en el tema de Creación de Store Procedure con Parametros en el foro de Mysql en Foros del Web. Buenas tardes. Sucede los siguiente estoy haciendo una aplicacion en ASP.Net con Windows Forms y tengo 8 Dropdawnlist los cuales los tengo que llenar con ...
  #1 (permalink)  
Antiguo 29/12/2014, 15:20
 
Fecha de Ingreso: diciembre-2014
Ubicación: Guadalupe
Mensajes: 7
Antigüedad: 10 años
Puntos: 0
Creación de Store Procedure con Parametros

Buenas tardes.

Sucede los siguiente estoy haciendo una aplicacion en ASP.Net con Windows Forms y tengo 8 Dropdawnlist los cuales los tengo que llenar con datos que extraigo de una tabla, solo que cuando quiero crear el Store Procedure y en los parametros que declaro los pongo en el codigo de asp me marca que no existe ese parametro en el SP me podrian ayudar con esto.

Gracias y Saludos

Codigo del SP :
Código MySQL:
Ver original
  1. DELIMITER $$
  2.     CREATE PROCEDURE SP_FERSA_ConsultaFormularioCotizador(IN Prod varchar(100), IN S_Producto varchar (100), in S_S_Producto varchar (100),
  3.     in Frent varchar (100), in Prof varchar (100), in Modu varchar (100), in Alt varchar (100), in Pis varchar (100), in Puert varchar (100))
  4.    
  5.     BEGIN
  6.    
  7.     SELECT distinct Producto = Prod, Sub_Producto = S_Producto, Sub_Sub_Producto = S_S_Producto, Frente = Frent, Profundidad = Prof, Modulos = Modu, Altura = Alt, Piso = Pis, Puertas = Puert
  8.     FROM combinaciones
  9.     WHERE cant_pzas > 0
  10.     AND Producto = Prod
  11.     AND Sub_Producto = S_Producto
  12.     AND Sub_Sub_Producto = S_S_Producto
  13.     AND Frente = @Frent
  14.     AND Profundidad = Prof
  15.     AND Modulos = Modu
  16.     AND Altura = Alt
  17.     AND Piso = Pis
  18.     AND Puertas = Puert ;
  19.    
  20.     END $$

Última edición por gnzsoloyo; 30/12/2014 a las 06:06
  #2 (permalink)  
Antiguo 30/12/2014, 06:18
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Creación de Store Procedure con Parametros

Hay al menos dos problemas:
Es muy probable que tu experiencia en SP y SQL haya sido en SQL Server, por lo cual lo primero que tienes que hacer es olvidarte de ciertas cosas, como el manejo de variables: son diferentes entre ambos DBMS.
Específicamernte, las variables internas de un SP en MySQL no usan "@", eso lo hace SQL Server. En MySQL las variables no deben llevar arroba por cuanto las que la usan son variables de sesión, que son un caso especial, y en tu SP esto:
Código MySQL:
Ver original
  1. AND Frente = @Frent
está haciendo una acción ilegal: Comparando un campo contra un NULL, ya que el parámetro no lleva ni debe llevar arroba ( @ ), y dentro de un SP, "@Frent" y "Frent" son variables distintas. Las variables con "@" se denominan "variables de usuario" y existen unicamente mientras la conexión con MySQL está abierta, y sólo dentro de esa instancia de conexión. Además carecen de tipo, y se las debe inciializar, o de lo contrario su valor es NULL.
Digo que comaprar con NULL es ilegal en MySQL porque al no ser NULL un dato, sino un estado, el campo no puede ser "igual a", sino ser nulo o no. Entonces se deben usar otro tipo de cláusulas.
Eso es una diferencia con SQL Server u Oracle, que admiten el uso de operadores como "=" para verificar NULL.



Por otro lado, hay un problema a nivel .Net.
El MySQL Connector fro NET, realiza ciertas validaciones en modo automático, internas, entre las que están la sintaxis de un SP cuando lo creas desde Net.
El conector analzia el codigo y si encuentra que hay arrobas las asumirá como parámetros del MysqlCommand, y requerirá parámetros.
Esto trae problemas cuando se usan variables de usuario en sesión de MySQL, ya que la "@", como te dije, se usa para cierto tipo de variables propias de este DBMS. En consecuencia disparará una MysqlException porque no encuentra el prámetro.
Esto se soluciona en la sintaxis del MysqlConnection, donde hay un parámetro para el StringConnection donde le indicas al conector que se usarán las formas antiguas de parametrización (parámetro AllowUserVariables).
Verifica el manual de referencia: http://dev.mysql.com/doc/connector-n...n-options.html

Posdata: Si vas a crear un SP desde .Net no necesitas indicar el DELIMITER. Este sólo opera cuando trabajas desde la consola MySQL, o bien desde un script SQL para MySQL. SI lo pones en un MysqlCommand te disparará errores.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 30/12/2014 a las 06:26
  #3 (permalink)  
Antiguo 05/01/2015, 11:18
 
Fecha de Ingreso: diciembre-2014
Ubicación: Guadalupe
Mensajes: 7
Antigüedad: 10 años
Puntos: 0
Respuesta: Creación de Store Procedure con Parametros

Hola, Gracias por la respuesta le hice unos cambios solo que ahora me marca error cuando declaro la primer variable, lo que estoy buscando es mandarle esos parámetros para que luego en ASP.Net le pueda hacer referencia a esos parámetros esto con la finalidad de crear una cotización de los productos que van a escoger, Gracias por la paciencia y la ayuda.

Código MySQL:
Ver original
  1. CREATE PROCEDURE SP_FERSA_ConsultaFormularioCotizador()
  2.  
  3.  
  4. declare Prod varchar(100),
  5. declare tipo varchar (100),
  6. declare Frent varchar (100),
  7. declare Prof varchar (100),
  8. declare Alt varchar (100),
  9. declare Pis varchar (100),
  10. declare Puert varchar (100)
  11.  
  12. select c.Producto into Prod,
  13. c.Sub_Producto into tipo,
  14. c.Frente into Frent,
  15. c.Profundidad into Prof,
  16. c.Altura into Alt,
  17. c.Piso into Pis,
  18. c.Puertas into Puert
  19.  
  20. from producto p , sub_producto sp, combinaciones c
  21. where p.id_prod = sp.id_prod
  22. and sp.id_prod = c.ID_SUB_PROD;

Última edición por gnzsoloyo; 05/01/2015 a las 11:28

Etiquetas: creación, parametros, procedure, select, store, tabla
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:14.