Tengo un script mysql en un archivo que necesito poder ejecutar desde mi aplicación C#. Este es un ejemplo de lo que contiene la secuencia de comandos:Cómo ejecutar * .sql archivo mysql en mi aplicación C#
USE osae;
-- Set DB version
CALL osae_sp_object_property_set('SYSTEM', 'DB Version', '0.3.5', '', '');
CALL osae_sp_object_property_set('SYSTEM', 'Debug', 'FALSE', '', '');
CALL osae_sp_object_type_property_add ('Prune Logs','Boolean','TRUE','SYSTEM',0);
CALL osae_sp_object_property_set ('SYSTEM','Prune Logs','TRUE','','');
DELIMITER $$
DROP PROCEDURE IF EXISTS osae_sp_object_event_script_update$$
CREATE DEFINER = 'root'@'localhost'
PROCEDURE osae_sp_object_event_script_update(IN pobject varchar(200), IN pevent varchar(200), IN ptext text)
BEGIN
DECLARE vObjectCount INT;
DECLARE vObjectID INT;
DECLARE vObjectTypeID INT;
DECLARE vEventCount INT;
DECLARE vEventID INT;
SELECT COUNT(object_id) INTO vObjectCount FROM osae_object WHERE UPPER(object_name)=UPPER(pobject);
IF vObjectCount > 0 THEN
SELECT object_id,object_type_id INTO vObjectID,vObjectTypeID FROM osae_object WHERE UPPER(object_name)=UPPER(pobject);
SELECT COUNT(event_id) INTO vEventCount FROM osae_object_type_event WHERE object_type_id=vObjectTypeID AND (UPPER(event_name)=UPPER(pevent) OR UPPER(event_label)=UPPER(pevent));
IF vEventCount = 1 THEN
SELECT event_id INTO vEventID FROM osae_object_type_event WHERE object_type_id=vObjectTypeID AND (UPPER(event_name)=UPPER(pevent) OR UPPER(event_label)=UPPER(pevent));
UPDATE osae_object_event_script SET event_script=ptext WHERE object_id=vObjectID AND event_id=vEventID;
-- CALL osae_sp_debug_log_add(CONCAT('Updated ',vObjectID,' - ',vEventID,ptext),'');
END IF;
END IF;
END
$$
DELIMITER ;
Como se puede ver que tiene una mezcla de líneas que llaman a procedimientos almacenados y alguna gota y CREATE para actualizar otros procedimientos almacenados.
me han tratado dos métodos diferentes para ejecutar la secuencia de comandos y ambos han fallado:
MySqlScript script = new MySqlScript(connection, File.ReadAllText("script.sql"));
script.Execute();
Esto produce la excepción: Índice fuera de los límites de la matriz.
MySqlCommand upgCommand = new MySqlCommand();
upgCommand.Connection = connection;
upgCommand.CommandText = File.ReadAllText("script.sql");
upgCommand.ExecuteNonQuery();
Esto arroja la excepción de que hay un error en mi sintaxis sql.
Cuando ejecuto todo el script manualmente en dbForge Studio, se ejecuta perfectamente. ¿Cómo puedo obtener este script para que se ejecute correctamente desde mi aplicación C#
Será este guión jamás puede cambiar? Si es así, probablemente sea mejor que el programa ejecute 'mysql' en la línea de comando con el script como parámetro. De lo contrario, consuma cada paso del guión en su programa; de esa forma la cadena es menos frágil, es decir, dependerá completamente de su propio proceso y no de una secuencia de comandos que puede estar o no estar allí y que puede funcionar o no. –
desafortunadamente no puedo usar el exe mysql para ejecutar el script porque el servidor mysql puede estar en un equipo diferente – Brian