Pomelo.entityframeworkcore.mysql: Como usar DELIMITER em instruções sql brutas

Criado em 4 set. 2019  ·  3Comentários  ·  Fonte: PomeloFoundation/Pomelo.EntityFrameworkCore.MySql

Eu quero criar um gatilho para usar sql bruto, 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 ;

Executado em mariadb não é problema, mas a consulta sql bruta usando o núcleo EF reportará um erro DELIMITER, como segue

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 o mesmo erro

Então, como executar o sql bruto com DELIMITER , ou quais alternativas?

Por favor, obrigado!

closed-question type-question

Todos 3 comentários

DELIMITER $$ é para MySQL Workbench. No código C #, basta criar um MySqlCommand com o texto completo do comando e executá-lo:

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 $$ é para MySQL Workbench. No código C #, basta criar um MySqlCommand com o texto completo do comando e executá-lo:

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();
}

Obrigado, isso é muito útil para mim。 非常 感谢!

Esta página foi útil?
0 / 5 - 0 avaliações