Ver Mensaje Individual
  #2 (permalink)  
Antiguo 30/12/2014, 06:18
Avatar de gnzsoloyo
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