Luego de ver el código posteado, no encuentro errores evidentes, por lo que si es el que estás ejecutando no debería generar problemas... salvo un detalle.
Suponiendo que ingresas todos los valores correctamente, y que el SP está correctamente escrito ahora (recordando que había que incluir el campo "mutual" en el INSERT), solamente puedo suponer una de varias posibilidades que generen error:
1) Los campos FOREIGN KEY hacen, obviamente referencia a campos clave de sendas tablas. ¿Te aseguraste que esos valores YA ESTÉN CARGADOS en sus tablas ANTES de insertar este registro? Es un error muy común al comenzar a trabajar con tablas referenciales. Las tablas primarias (las que no hacen referencia a otras)
deben estar cargadas antes de las secundarias, o no te permitirá cargar la secundaria (las que tienen campos FK).
2) En las parametrizaciones es posible que el nombre del parámetro requiera el uso de "@" o "?" antes del nombre, aunque en el prototipo del SP no se encuentren escritos. Esto es, algo así:
Código:
ingresa.Parameters["?rut_empresa"].Direction = ParameterDirection.Input;
o bien:
Código:
ingresa.Parameters["@rut_empresa"].Direction = ParameterDirection.Input;
3) Los campos de tipo fecha, si se ingresan en forma de string, requieren un formato específico (aaaa-mm-dd), ya que es el formato que MySQL maneja. Si quieres que el ODBC se encargue de la conversión, la variable fecha_constitucion DEBE SER de tipo DateTime, o Date. También debes recordar que el
ODBC por default no puede manejar fechas nulas (NULL), sino debe ser configurado para eso.
Un tip final sería: El C# en Visual Studio cuenta con una clase MsgBx y otra MessageBox. Generan una
ventana de mensaje configurable que puedes usar para que te muestre la propiedad Message que estás capturando en la variable exc del catch. Usala para visualizar el mensaje que está devolviendo ODBC. Eso te dirá claramente cuál es el error.