Que te salte un error en el Odbc, no nos dice demasiado. El problema puede ser de muchos tipos sin saber cuál es el número de error devuelto ni el mensaje.
Antes que nada, te sugiero que si estás usando Visual Studio .Net, es mejor usar el conector específico
de MySQL para .Net.
Por otr lado:
1. SI lo que quieres es que el SP se almacene en la base de datos (es decir, crearlo), la sentencia de creación debe ser enviada como una sentencia común de consulta.
2. Por precaución, elimina el segmento de "DEFINER=`root`@`localhost`", eso le pertenece solamente al root, y si el user que estás usando no es el root, puede generar un error.
3. Para ejecutarlo, la llamada es "
sp_ingresa_empresa", luego debes indicar que el tipo de sentencia es "StoreProcedure" y no "Text", después debes ingresar las variables como parámetros ANTES de ejecutar la sentencia.
4. No te olvides que al declarar un parámetro se debe indicar si de entrada, salida o entrada-salida.
5. En el control de catch, no estás capturando el tipo de excepción que se produce, por lo que no sabes realmente qué está pasando. Trata de corregir eso.