Pomelo.entityframeworkcore.mysql: Cómo usar DELIMITER en declaraciones SQL sin formato

Creado en 4 sept. 2019  ·  3Comentarios  ·  Fuente: PomeloFoundation/Pomelo.EntityFrameworkCore.MySql

Quiero crear un disparador use sql sin procesar, este sql como:

DELIMITER $$   
CREATE OR REPLACE TRIGGER platformdb.trig_updatevehiclekilometer
    AFTER UPDATE ON platformdb.VehicleTravels FOR EACH ROW 
    BEGIN
        UPDATE Vehicles SET TotalKilometers=new.Kilometers WHERE ID=new.VehicleId;
    END$$
DELIMITER ;

Ejecutado en mariadb no es un problema, pero la consulta sql sin procesar que usa EF core informará un error DELIMITER, de la siguiente manera

MySql.Data.MySqlClient.MySqlException (0x80004005): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'DELIMITER $$ CREATE OR REPLACE TRIGGER platformdb.trig_updatevehiclekilometer  A' at line 1 ---> MySql.Data.MySqlClient.MySqlException (0x80004005): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'DELIMITER $$ CREATE OR REPLACE TRIGGER platformdb.trig_updatevehiclekilometer  A' at line 1

use DELIMITER $$; como el mismo error

Entonces, ¿cómo ejecutar sql sin procesar con DELIMITER , o qué alternativas?

¡Porfavor gracias!

closed-question type-question

Todos 3 comentarios

DELIMITER $$ es para MySQL Workbench. En el código C #, simplemente cree un MySqlCommand con el texto completo del comando y ejecútelo:

using (var command = new MySqlCommand(@"CREATE OR REPLACE TRIGGER platformdb.trig_updatevehiclekilometer
    AFTER UPDATE ON platformdb.VehicleTravels FOR EACH ROW 
    BEGIN
        UPDATE Vehicles SET TotalKilometers=new.Kilometers WHERE ID=new.VehicleId;
    END", connection))
{
    command.ExecuteNonQuery();
}

DELIMITER $$ es para MySQL Workbench. En el código C #, simplemente cree un MySqlCommand con el texto completo del comando y ejecútelo:

using (var command = new MySqlCommand(@"CREATE OR REPLACE TRIGGER platformdb.trig_updatevehiclekilometer
    AFTER UPDATE ON platformdb.VehicleTravels FOR EACH ROW 
    BEGIN
        UPDATE Vehicles SET TotalKilometers=new.Kilometers WHERE ID=new.VehicleId;
    END", connection))
{
    command.ExecuteNonQuery();
}

Gracias, esto es muy útil para mí。 非常 感谢!

¿Fue útil esta página
0 / 5 - 0 calificaciones